我已阅读 Optional Chaining苹果的 The Swift Programming Language (swift2) 的章节。在本章中,没有提到在函数名之后但在左括号之前的可选问号。
但是我从 this 看到了下面的 swift 代码Apple 的文档(“委托(delegate)”部分):
//There is a question mark right after 'window'
if let fullScreenSize = myDelegate?.window?(myWindow, willUseFullScreenContentSize: mySize) {
print(NSStringFromSize(fullScreenSize))
}
在函数名之后但在左括号之前有一个问号是什么意思?
最佳答案
有两种情况使用它:
一个协议(protocol)方法本身被标记为
optional
,所以我们不知道协议(protocol)的采用者是否实现了这个方法。我们正在向 AnyObject 发送消息。我们可以向 AnyObject 发送任何已知的类消息——它会丢弃类型检查——但是,同样,我们不知道实际对象是否实现了这个方法。
所以这个问号的意思是可选并且安全发送这个消息。如果事实证明接收者没有实现它,则不要发送消息,并返回 nil。如果接收者确实实现了它,则发送消息,但现在我们必须将任何结果包装在一个 Optional 中(否则我们无法在第一种情况下返回 nil
)。
在幕后,正在调用 Objective-C respondsToSelector:
。因此,只有当接收者接触到 Objective-C 时,此模式才可用。基本上,这是一个用 Swift 速记表示的 Objective-C 语言特性。
关于ios - 函数名称后的可选链接问号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32670526/