ios - 函数名称后的可选链接问号

标签 ios swift swift2

我已阅读 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/

相关文章:

ios - Xcode 7 的签名身份对话框窗口中的重置按钮如何工作

iOS 7.0 和 ARC : UITableView never deallocated after rows animation

ios - 为什么这些约束在 iPad 9.7"and 12.9"上不能正常工作?

iphone - 在我将它们保存到 plist 之前,变量失去了它们的值

ios - 从 UITableViewCell 到 ViewController 的按钮操作

swift - 如何从ios应用程序中的特定目录读取文本文件?

swift - 将 Swift 1.2 代码转换为 Swift 2

swift - 替换数组中索引的值

arrays - 如何在 O(n) 运行时间和 O(1) 空间复杂度内重组数组?

firebase - 新的 Firebase Facebook 登录