在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? = nil
和let x = nil as UIView()
,但它们比我之前使用的方法更冗长。是在Swift 3.0中删除了UIView?()
构造函数,还是以我尚未发现的形式替换它?
答案 0 :(得分:3)
以下将x初始化为nil,括号完全是多余的。
var x: UIView?
return x == nil
将返回true
查看开发人员文档以获取更多信息。
如果定义可选变量而不提供默认值, 变量自动设置为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?()不再起作用的原因“