【发布时间】:2016-08-01 13:06:31
【问题描述】:
如果我有一个 Swift 变量,则使用可选链接
var s: String?
s 可能包含 nil,或者包裹在 Optional 中的 String。所以,我尝试了这个来获得它的长度:
let count = s?.characters?.count ?? 0
但是,编译器想要这样:
let count = s?.characters.count ?? 0
我对可选链接的理解是,一旦您开始在点分表达式中使用?.,其余属性将变为可选,并且通常由?. 访问,而不是.。
所以,我进一步挖掘并在操场上尝试了这个:
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在第一种情况下被视为单个可选链接,但我还没有看到记录。 -
现在也在 [swift-users] 上讨论:lists.swift.org/pipermail/swift-users/Week-of-Mon-20160801/…。