【问题标题】:Why can't Swift closure variable types be implicitly unwrapped optionals?为什么 Swift 闭包变量类型不能是隐式展开的选项?
【发布时间】:2015-09-24 04:45:53
【问题描述】:

例如,

alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler:{ (x:UIAlertAction) in
...

将给出“无法找到具有...的初始化程序”错误。

但是,如果我说 UIAlertAction!UIAlertAction? 而不仅仅是 UIAlertAction,它会起作用。为什么是这样?

【问题讨论】:

    标签: ios swift closures uialertview


    【解决方案1】:

    这些变量的类型都已经在 Cocoa API 中声明了。你必须匹配它们。一个事物和一个包裹该事物的 Optional 不匹配;它们是两种完全不同的类型。

    另一方面,当类型已知时,您可以省略它们。因此,最简单的方法是将x:UIAlertAction 更改为简单的x 甚至_

    【讨论】:

    • 谢谢!所以只是澄清一下:当从 Cocoa API 调用处理程序时,它的参数是 UIAlertAction! 而不是 UIAlertAction?因为有时我会写闭包并且可以只写(x:String) 而不是显式展开的(x:String!)
    • 它只与 Swift 对 Cocoa API 的了解有关。在 Xcode 7 中,API 有所不同,您的裸 UIAlertAction 将起作用。
    • 哇!谢谢!只是出于好奇,Xcode 7 发生了哪些变化以使其与众不同?
    • API。就像我说的。 Apple 不断对其进行调整,以使 Swift 对它的看法更好。在 Xcode 7 中,它并不完美,但要好得多。你应该升级!
    • 刚刚做到了!谢谢你的帮助,马特!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多