在Swift的Optional类型中,“Optional of an Optional”的目的是什么?

5

我在Swift Tests源代码中发现了一个有趣的函数:

func test(_ v: A????, _ cast: (A????) -> B?)

由于Type?只是Optional<Type>的语法糖,这意味着参数v的类型可以重写为Optional<Optional<Optional<Optional<A>>>>

我知道这个函数用于测试可选类型,所以使用参数vcast有点过头了,但在Swift中拥有“可选的可选等”类型的实际用途是什么(如果有的话)?


[OT] 我认为多个嵌套的 Optional 表明开发者的粗心。 - vadian
@vadian 嗯,如果是有意为之的话,也许可以这么做。但通常情况下,这只是在数组的可选项上使用 .first 或者在返回可选项的方法上使用 try? 的必然结果。 - Alexander
1个回答

3

在Swift编程中,有时候会出现访问数据的问题。

一个例子是当你使用一个字典存储可选类型的值,并且在该字典中查找值时:

let rockStars: [String: String?] = ["Sting": nil, "Elvis": "Presley", "Bono": nil, "Madonna": nil]

let lastName = rockStars["Elvis"]
print(lastName as Any)
Optional(Optional("Presley"))
这是因为在字典中查找不到键时,它会返回nil,导致字典查找失败。因此,字典查找的返回类型必须是可选值类型。从rockStars字典中查找将返回一个String??类型。

1
另一个例子:迭代器通过在next()中返回nil来表示它们已经到达了末尾。如果基础类型是可选的,则它们可能在迭代过程中返回.some(nil),但是通过返回.none来表示迭代的结束。 - BallpointBen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接