在Swift 3.0中UIView?()构造函数发生了什么?

时间:2016-09-17 17:23:14

标签: swift optional swift3

在Swift 2.2中,我经常使用类似于let x = UIView?()的简明语法声明变量。这为x类型提供了UIView?,并使用nil对其进行了初始化。 (当然,在这些示例中,您可以使用任何类型而不是UIView

然而,当我在Swift 3.0中做同样的事情时,我收到一个错误: Cannot invoke initializer for type 'UIView?' with no arguments。它还说Overloads for 'UIView?' exist with these partially matching parameter lists: (Wrapped), (nilLiteral: ())。不知何故,我不认为UIView?(nilLiteral: ())正是我所追求的。

当然,还有其他方法可以做同样的事情,例如let x: UIView? = nillet x = nil as UIView(),但它们比我之前使用的方法更冗长。是在Swift 3.0中删除了UIView?()构造函数,还是以我尚未发现的形式替换它?

1 个答案:

答案 0 :(得分:3)

以下将x初始化为nil,括号完全是多余的。

var x: UIView?
return x == nil

将返回true

查看开发人员文档以获取更多信息。

https://developer.apple.com/library/content//documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html

  

如果定义可选变量而不提供默认值,   变量自动设置为nil:

var surveyAnswer: String?
// surveyAnswer is automatically set to nil
@Hamish发表评论澄清UIView的原因?()不再有效:

“语法UIView?是Optional的语法糖,因此UIView?()只是Optional.init()的语法糖。在Swift 2中,Optional&#s; init()构造一个设置为.None的新可选值。所以是的,它运作正常。但是在Swift 3中,这个初始化程序已被删除,这就是UIView?()不再起作用的原因“