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>
答案 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) }