ios - Swift 中 "Accessing Subscripts of Optional Type"的说明

标签 ios arrays swift multidimensional-array option-type

有人可以解释为什么可选链接是在非可选子数组上完成的。 Apple 的 Swift 文档给出的解释让我很困惑:

If a subscript returns a value of optional type—such as the key subscript of Swift’s Dictionary type—place a question mark after the subscript’s closing bracket to chain on its optional return value:

文档示例:

var testScores = ["Dave": [86, 82, 84], "Bev": [79, 94, 81]]
testScores["Dave"]?[0] = 91
testScores["Bev"]?[0]++
testScores["Brian"]?[0] = 72
// the "Dave" array is now [91, 82, 84] and the "Bev" array is now [80, 94, 81]

声明不应该是:

var testScores:[String:Array<Int>?] = ["Dave": [86, 82, 84], "Bev": [79, 94, 81]]

这是关于 Accessing Subscripts of Optional Type 的 Apple Swift 文档部分

最佳答案

我认为这里的混淆是字典 testScores 是非可选的,但值 testScores["Dave"] 是可选的。原因是任何时候你从字典中请求一个值,它可能存在……也可能不存在。从字典返回本质上是一个可选操作。考虑一下,如果您说 testScores["Fred"]——这将返回 nil。因为有可能返回一个对象,或者有可能返回nil,下标ArrayDictionary 会返回一个可选的Array。因此,返回类型 ([Int]?) 不同于值类型 ([Int])。

您给出的第二个示例略有不同。在您的第二个示例中,元素本身 不是可选的,而是可选的。这意味着你可以有这样的东西:

let array1 = [0, 1, 2]
let array2: [Int]? = nil
let dict = ["Fred": array1, "Wilma": array2] // [String: [Int]?]

在那种情况下,您实际上有 两层 可选值(一个可选的可选整数数组,[Int]??,并且需要访问一个元素,例如这个:

let x = dict["Fred"]??[0]

关于ios - Swift 中 "Accessing Subscripts of Optional Type"的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31734817/

相关文章:

iphone - iOS 通用应用程序中的自定义头文件

ios - Swift - 如何关闭所有 View Controller 以返回根目录

ios - 如何使用核心数据类中的所有对象创建一个字符串

ios - 滚动后使用可重复使用的单元格与 uitableview 单元格的内容重叠

arrays - Angular $save 并推送到数组项目后,除非我重新运行查询,否则不会添加

java - 如何用Java搜索最高值

c - 为什么带变量的数组分配有效?

swift - 从 UIImagePickerController 获取图像后,UIImageView 为 iPhone 5 旋转图像

ios - 通过蓝牙接收字符串数据

iphone - 后台任务是这个问题的解决方案吗?