非空数组,访问第一个元素:索引超出范围 (Swift 2.0)
Non empty array, accessing first element: index out of range (Swift 2.0)
我有一个包含 4 个 UIImageVIew
的数组和一个大小可变的图像数组:[UIImage]
。
我想遍历视图数组并为每个视图分配最后 4 张图像。
let photos = images.suffix(4)
for (index, view) in views.enumerate() {
if index <= photos.count - 1 {
view.image = photos[index]
} else {
view.image = nil
}
}
如果 images
中的元素不超过 4 个,代码将完美运行。然后我崩溃了:fatal error: ArraySlice index out of range
.
我在 for-loop 中打印了 index
,当索引为 0
时似乎发生了崩溃。 views.count
和 photos.count
return 4
在同一个循环中。
因此,我在访问非空数组的第一个 0
元素时出错。
在 Swift 1.2 中,此代码完美运行:
let photos = suffix(images, 4)
for (index, view) in enumerate(views) {
if index <= photos.count - 1 {
view.image = photos[index]
} else {
view.image = nil
}
}
切换到 2.0 后的唯一变化是 suffix
和 enumerate
方法。
它看起来像 Swift 2.0 错误还是我做错了什么?
Link to source file
我已经完成的解决方案:
let photos = Array(images.suffix(4))
应该与 Swift 1.2
中的 suffix()
功能完全一样
这是由于最近对 ArraySlice
进行了更改。现在 ArraySlice
的索引不是从零开始的。例如,如果 images.count == 10
,则 images.suffix(4).startIndex == 5
。请参阅发行说明 here,并搜索 “为了通用代码的一致性和更好的组合”。
我有一个包含 4 个 UIImageVIew
的数组和一个大小可变的图像数组:[UIImage]
。
我想遍历视图数组并为每个视图分配最后 4 张图像。
let photos = images.suffix(4)
for (index, view) in views.enumerate() {
if index <= photos.count - 1 {
view.image = photos[index]
} else {
view.image = nil
}
}
如果 images
中的元素不超过 4 个,代码将完美运行。然后我崩溃了:fatal error: ArraySlice index out of range
.
我在 for-loop 中打印了 index
,当索引为 0
时似乎发生了崩溃。 views.count
和 photos.count
return 4
在同一个循环中。
因此,我在访问非空数组的第一个 0
元素时出错。
在 Swift 1.2 中,此代码完美运行:
let photos = suffix(images, 4)
for (index, view) in enumerate(views) {
if index <= photos.count - 1 {
view.image = photos[index]
} else {
view.image = nil
}
}
切换到 2.0 后的唯一变化是 suffix
和 enumerate
方法。
它看起来像 Swift 2.0 错误还是我做错了什么? Link to source file
我已经完成的解决方案:
let photos = Array(images.suffix(4))
应该与 Swift 1.2
suffix()
功能完全一样
这是由于最近对 ArraySlice
进行了更改。现在 ArraySlice
的索引不是从零开始的。例如,如果 images.count == 10
,则 images.suffix(4).startIndex == 5
。请参阅发行说明 here,并搜索 “为了通用代码的一致性和更好的组合”。