Ios 函数名后的可选链接问号

Ios 函数名后的可选链接问号,ios,swift,swift2,Ios,Swift,Swift2,我读过苹果公司的Swift编程语言(swift2)一章。在本章中,没有提到在函数名之后但在左括号之前的可选问号 但我从苹果的文件(授权部分)中看到了以下swift代码: 在函数名后但在左括号前加问号是什么意思 当协议方法是可选的并且可能无法在对象上实现时,使用此方法。(在这种情况下,可选的窗口:将使用NSWindowDelegate协议中的fullScreenContentSize:方法)在两种情况下使用此方法: 协议方法本身标记为可选,因此我们不知道协议的采用者是否实现了此方法 我们正在向A

我读过苹果公司的Swift编程语言(swift2)一章。在本章中,没有提到在函数名之后但在左括号之前的可选问号

但我从苹果的文件(授权部分)中看到了以下swift代码:


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

当协议方法是可选的并且可能无法在对象上实现时,使用此方法。(在这种情况下,可选的
窗口:将使用
NSWindowDelegate
协议中的fullScreenContentSize:
方法)

在两种情况下使用此方法:

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

  • 我们正在向AnyObject发送消息。我们可以向AnyObject发送任何已知的类消息—它会丢弃类型检查—但是,同样,我们不知道实际对象是否实现了此方法

因此,这个问号意味着可以选择安全地发送此消息。如果发现收件人没有实现它,则不要发送消息,并返回nil。如果收件人确实实现了它,则发送消息,但现在我们必须将任何结果包装为可选结果(因为在第一种情况下,否则我们无法返回
nil

在幕后,正在调用Objective-C
响应选择器:
。因此,只有当接收者接触Objective-C时,这种模式才可用。基本上,这是一种Objective-C语言功能,用Swift速记表达。

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