Swift如何检查数组指定索引是否存在 避免下标访问越界崩溃
你编写的判断代码会报错有两个核心原因:
- Swift 中
if条件只能接收布尔类型的返回值,你直接通过下标取数组元素得到的是String类型的值,无法自动转为布尔值,所以触发类型不匹配报错。 - 即使调整了类型逻辑,直接通过下标访问不存在的索引会直接触发越界崩溃,根本不会进入判断分支。
正确实现方案
方案1:直接判断索引范围(最适合当前场景)
Swift 数组的合法索引范围是 0..<数组.count,只要判断下一个索引小于数组长度即可:
if imageNum + 1 < items.images.count { imageNum += 1 }
这种写法性能最优,不需要额外封装,完全满足你递增索引的判断需求。
方案2:通用安全下标扩展(适合频繁做索引安全判断的场景)
如果项目里经常需要判断数组索引是否存在,可以给集合类型加一个安全下标的扩展,越界时返回nil不会崩溃:
extension Collection { subscript(safe index: Index) -> Element? { indices.contains(index) ? self[index] : nil } }
使用时通过可选绑定判断即可:
if let _ = items.images[safe: imageNum + 1] { imageNum += 1 }
内容的提问来源于stack exchange,提问作者mitchellOcavoos
相关产品推荐
相关产品推荐

