gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 07:32:27 25 4
gpt4 key购买 nike

有人可以解释为什么可选链接是在非可选子数组上完成的。 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com