函数名后的可选链接问号

use*_*225 6 ios swift swift2

我已经阅读了苹果的Swift编程语言(swift2)的可选链接章节.在本章中,没有关于可选的问号提的函数名称,但左括号前.

但我看到下面的SWIFT代码这个苹果公司的文件(以下简称"代表团"部分):

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

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

mat*_*att 10

它使用了两种情况:

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

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

所以这个问号表示发送该消息可选安全.如果事实证明收件人没有实现它,请不要发送消息,并返回nil.如果收件人确实实现了它,则发送消息,但现在我们必须将任何结果包装在Optional中(因为否则我们nil在第一种情况下无法返回).

在幕后,Objective-C respondsToSelector:被称为.因此,仅当收件人暴露于Objective-C时,此模式才可用.基本上,这是一个以Swift速记表示的Objective-C语言特性.