对 Swift 中"Accessing Subscripts of Optional Type"的澄清



谁能解释一下为什么在非可选子数组上进行可选链?我对苹果的Swift文档给出的解释感到困惑:

如果一个下标返回一个可选类型的值——比如Swift的Dictionary类型的key下标——在下标的右括号后面加一个问号来连接它的可选返回值:

文档的例子:

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]]

这是关于访问可选类型

下标的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数组,[Int]??),并且需要访问这样的元素:

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

相关内容

  • 没有找到相关文章

最新更新