使用可选链,如果我有一个Swift变量
var s: String?
字符串可能包含空值(nil),或者被封装在一个可选项(Optional)中。因此,我尝试使用以下代码来获取其长度:
let count = s?.characters?.count ?? 0
然而,编译器需要这个:
let count = s?.characters.count ?? 0
我理解的可选链是,一旦在点表达式中开始使用?.
,其余的属性都变成了可选项,并且通常通过?.
而不是.
来访问。
所以,我进一步尝试在 playground 中运行了以下代码:
var s: String? = "Foo"
print(s?.characters)
// Output: Optional(Swift.String.CharacterView(_core: Swift._StringCore(_baseAddress: 0x00000001145e893f, _countAndFlags: 3, _owner: nil)))
结果表明s?.characters
确实是一个Optional实例,这意味着s?.characters.count
应该是非法的。
有人能帮我理解这种情况吗?
s?.characters.count
和(s?.characters)?.count
都可以编译通过,但是(s?.characters).count
不行。第一种情况下,characters.count
好像被当作一个单独的可选链,但我没有看到相关文档。 - Martin R