arrays - 为什么 Swift 中的数组索引不返回可选值?
问题描述
访问字典时,例如 [String:Any],结果类型为 Optional(Any)。
索引 [Any] 的数组时,结果类型为 Any,调用会抛出致命错误。
这种差异有什么原因吗?
使用保护 let、if let、? 和 ?? 分支执行会非常好,但是您必须将数组索引包装在 if data.count <= index 中。
解决方案
最终是出于性能原因:
常被拒绝的变更
...
字符串、字符和集合类型
虽然没有什么能阻止你自己动手:
extension Collection {
subscript(safelyIndex i: Index) -> Element? {
get {
guard self.indices.contains(i) else { return nil }
return self[i]
}
}
}
let array = Array(0...10)
let n = [safelyIndex: 3]
print(n as Any) // => Optional(3)
推荐阅读
- python-3.x - N 未定义(全球存在)
- jess - Jess在例行调用中报错
- opengl - OpenGL为什么在相同数量的片段上重复纹理可能会降低性能?
- node.js - 如何解决Nodejs中的“错误:ENOENT:没有这样的文件或目录”
- java - What is an illegal reflective access?
- azure - 在 Azure API 管理中向特定终结点添加授权
- c# - 模型上的实体框架在构造函数中创建传递参数
- publish - 谷歌地图街景发布
- katalon-studio - 如何在 Katalon 工作室处理日期选择器?
- r - 如何使用按钮以闪亮的方式更新数据表