函数名后的可选链接问号

时间:2015-09-19 16:23:45

标签: ios swift swift2

我已阅读了苹果的Swift编程语言(swift2)的Optional Chaining章节。在本章中,没有提及可选的问号之后的函数名称但在左括号之前。

但是我在this Apple的文档('代表团'部分)中看到了以下快速代码:

 //There is a question mark right after 'window'
    if let fullScreenSize = myDelegate?.window?(myWindow, willUseFullScreenContentSize: mySize) {
        print(NSStringFromSize(fullScreenSize))
    }

在函数名之后但在左括号之前有问号是什么意思?

2 个答案:

答案 0 :(得分:10)

它使用了两种情况:

  • 协议方法本身标记为optional,因此我们不知道协议的采用者是否实现了此方法。

  • 我们正在向AnyObject发送消息。我们可以将任何已知类消息发送给AnyObject - 它会抛弃类型检查 - 但是,我们再也不知道实际对象是否实现了这种方法。

    < / LI>

因此,此问号表示发送此消息可选安全。如果结果是收件人实现它,请不要发送邮件,并返回nil。如果收件人 实现它,请发送消息,但现在我们必须将任何结果包装在Optional中(因为否则我们在第一种情况下无法返回nil)。

在幕后,正在调用Objective-C respondsToSelector:。因此,仅当收件人暴露于Objective-C时,此模式才可用。基本上,这是一个用Swift简写表示的Objective-C语言特性。

答案 1 :(得分:0)

当协议方法是可选的并且可能未在对象上实现时使用。 (在本例中,window:willUseFullScreenContentSize:协议中的可选NSWindowDelegate方法)