Неустранимая ошибка Swift: индекс вне диапазона (индекс вне диапазона) - PullRequest
1 голос
/ 28 мая 2020

Привет, я пытаюсь быстро научиться. У меня есть небольшой опыт работы с javascript, поэтому я попытался смоделировать этот l oop так же, как обычно. Функция фактически выводит то, что должна, но я продолжаю получать сообщение об ошибке, и я не уверен, что делаю неправильно. Вот мой код:

import UIKit
let dir: [String] = ["north", "east", "south", "west"]
var num = dir.count
func move(){
    for i in 0 ... num{
        var holder = dir[i]
        switch holder{
        case "north":
            print("you've moved north")
        case "east":
            print("you've moved east")
        case "south":
            print("you've moved south")
        case "west":
            print("you've moved west")
        default:
            print("where you going?")
        }
        if i == 3{
            print("round the world")
        }

    }
}

move()

я получаю эту ошибку в последней строке «move ()»

ошибка: выполнение было прервано, причина: EXC_BAD_INSTRUCTION (code = EXC_I386_INVOP, subcode = 0x0).

это то, что выводит на консоль:

вы переместились на север

вы переместились на восток

вы переместились на юг

вы переместились на запад

вокруг света

Неустранимая ошибка: индекс вне допустимого диапазона: file / Library / Caches / com. apple.xbs / Sources / swiftlang / swiftlang-1103.2.25.8 / swift / stdlib / public / core / ContiguousArrayBuffer.swift, строка 444

Ответы [ 4 ]

3 голосов
/ 28 мая 2020

В быстром, есть более эффективные способы l oop ... но чтобы лучше понять, что вы реализовали ...

Я обновил ваш код ... он будет работать правильно.

let dir: [String] = ["north", "east", "south", "west"]
var num = dir.count
func move(){
    for i in 0..<num{
        var holder = dir[i]
        switch holder{
        case "north":
            print("you've moved north")
        case "east":
            print("you've moved east")
        case "south":
            print("you've moved south")
        case "west":
            print("you've moved west")
        default:
            print("where you going?")
        }
        if i == 3{
            print("round the world")
        }

    }
}

move()

Вывод: -

you've moved north
you've moved east
you've moved south
you've moved west
round the world

Счастливое кодирование в Swift: -)

1 голос
/ 28 мая 2020

В вашем коде пытается получить доступ к 4-му индексу из-за того, что вы использовали ... в синтаксисе управления l oop. И 4-й индекс не в массиве.

Вот некоторые подробности о swift l oop.

for index in 0...4 {
 ...
}

В приведенном выше фрагменте говорится, что нужно выполнять итерацию по диапазону, начиная с 0 и включая 4, то есть от 0–4

Если вы не хотите, чтобы 4 были включены, вы используете это, называемое оператором полуоткрытого диапазона (.. <). </p>

for index in 0..<4 {
 ...
}

Это приведет к oop от 0 до 3 и остановит выполнение .

0 голосов
/ 29 мая 2020

Итак, здесь вы сначала подсчитываете число, которое здесь 4.

enter image description here

0 голосов
/ 28 мая 2020
import UIKit

class ViewController: UIViewController {

    let dir: [String] = ["north", "east", "south", "west"]

    override func viewDidLoad() {
        super.viewDidLoad()
         move()
        // Do any additional setup after loading the view.
    }

    func move(){
        for (index, element) in dir.enumerated() {
       //   print("Item \(index): \(element)")
            switch element{
                        case "north":
                            print("you've moved north")
                        case "east":
                            print("you've moved east")
                        case "south":
                            print("you've moved south")
                        case "west":
                            print("you've moved west")
                        default:
                            print("where you going?")
                        }
                        if index == 3{
                            print("round the world")
                        }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...