我在Swift Tests源代码中发现了一个有趣的函数:
func test(_ v: A????, _ cast: (A????) -> B?)
由于Type?
只是Optional<Type>
的语法糖,这意味着参数v
的类型可以重写为Optional<Optional<Optional<Optional<A>>>>
。
我知道这个函数用于测试可选类型,所以使用参数v
和cast
有点过头了,但在Swift中拥有“可选的可选等”类型的实际用途是什么(如果有的话)?
我在Swift Tests源代码中发现了一个有趣的函数:
func test(_ v: A????, _ cast: (A????) -> B?)
由于Type?
只是Optional<Type>
的语法糖,这意味着参数v
的类型可以重写为Optional<Optional<Optional<Optional<A>>>>
。
我知道这个函数用于测试可选类型,所以使用参数v
和cast
有点过头了,但在Swift中拥有“可选的可选等”类型的实际用途是什么(如果有的话)?
在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??
类型。next()
中返回nil
来表示它们已经到达了末尾。如果基础类型是可选的,则它们可能在迭代过程中返回.some(nil)
,但是通过返回.none
来表示迭代的结束。 - BallpointBen
Optional
表明开发者的粗心。 - vadian.first
或者在返回可选项的方法上使用try?
的必然结果。 - Alexander