非空数组,访问第一个元素:索引超出范围(Swift 2.0)

Ric*_*hiy 3 arrays enumeration ios swift swift2

我有一个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
  }
}
Run Code Online (Sandbox Code Playgroud)

如果中的元素不超过4个,则代码可以正常工作images.然后我崩溃了:fatal error: ArraySlice index out of range.

index在for循环中打印出来,似乎在索引时发生了崩溃0.views.count并在同一个循环中photos.count返回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
  }
}
Run Code Online (Sandbox Code Playgroud)

切换到2.0后唯一的变化是suffixenumerate方法.

它看起来像Swift 2.0错误还是我做错了什么? 链接到源文件

解决方案我已完成:

let photos = Array(images.suffix(4))
Run Code Online (Sandbox Code Playgroud)

应该完全像suffix() 函数一样工作Swift 1.2

Fuj*_*jia 5

这是由于最近的变化ArraySlice.现在指数ArraySlice不是从零开始的.例如,如果images.count == 10,那么images.suffix(4).startIndex == 5.请参阅此处的发行说明,并搜索"为了一致性和更好的通用代码组合".