Swift-线程1:致命错误:索引超出范围错误问题

时间:2018-09-28 09:52:35

标签: swift

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])”错误,因此我该如何解决这个问题< / p>

3 个答案:

答案 0 :(得分:4)

我建议:

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

它将避免崩溃,并且将循环所有元素

答案 1 :(得分:2)

首先,数组(单数)的名称imageFileName具有误导性。数组应以复数形式命名:imageFileNames


对于集合类型中的项目数,基本上不使用硬编码的常量。这就是撞车的原因。 并且不要使用基于纯索引的for循环枚举Swift中的数组。

在大多数情况下(很可能也是在这种情况下),您只需要元素而不需要索引

for imageName in imageFileNames { ...

在极少数情况下,您确实需要索引使用快速枚举

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

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

答案 2 :(得分:1)

您的崩溃取决于MAX_ARRAY_NUM的值。我猜它大于6。然后,当您尝试访问imageFileName[7]时,它会崩溃,因为此位置没有元素。

最好的解决方案是遍历您的项目,不关联任何索引。

DionizB的解决方案有效。但我想发表我的文章:

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