Swift - Thread 1: фатальная ошибка: ошибка индекса вне диапазона - PullRequest
0 голосов
/ 28 сентября 2018
var imageFileName = ["Ahri.jpg", "Bard.jpg", "batman.jpg", "Janna.jpg", "spiderman.jpg", "Twisted Fate.jpg"]

@IBOutlet var pickerImage: UIPickerView!

@IBOutlet var lblImageFileName: UILabel!

@IBOutlet var imageView: UIImageView!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    for i in 0 ..< MAX_ARRAY_NUM {
        let image = UIImage(named: imageFileName[i])
        imageArray.append(image)
    }

это мой код Swift, и он сохраняет «Поток 1: фатальная ошибка: индекс выходит за пределы диапазона« ошибка наступает », пусть image = UIImage (named: imageFileName [i])» «этот пункт, так как я могу исправитьэтот

Ответы [ 3 ]

0 голосов
/ 28 сентября 2018

Ваше падение зависит от значения MAX_ARRAY_NUM.Я могу предположить, что это больше, чем 6. Затем, когда вы пытаетесь получить доступ к imageFileName[7], он падает, так как в этой позиции нет элемента.

Лучшее решение - циклически перебирать ваши элементы, не связываясь ни с одним индексом.

Решение ДионизБ работает.Но я хотел бы опубликовать мой:

imageArray = imageFileName.map { return UIImage(named: $0) }

0 голосов
/ 28 сентября 2018

Прежде всего имя imageFileName для массива (единственного числа) вводит в заблуждение.Массив должен быть назван во множественном числе: imageFileNames


В основном не используйте жестко запрограммированные константы для количества элементов в типе коллекции.Это является причиной сбоя.
И не используйте циклы for, основанные на чистых индексах, для перечисления массивов в Swift.

В большинстве случаев - скорее всего, и в этом - вам нужен только элемент, а не индекс

for imageName in imageFileNames { ...

В редких случаях вам действительно нужен индекс, используйте быстрое перечисление

for (index, imageName) in imageFileNames.enumerated() { ...

или

for (index, _) in imageFileNames.enumerated() { ...
0 голосов
/ 28 сентября 2018

Я бы предложил:

for imageName in imageFileName {
    let image = UIImage(named: imageName)
    imageArray.append(image)
}

Это позволит избежать сбоев и зацикливает все ваши элементы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...