在Swift 2.2中,我经常使用类似于
当然,还有其他替代方法来完成相同的事情,例如
let x = UIView?()
的简洁语法声明变量。这为x
赋予了UIView?
类型,并用nil
进行初始化。(当然,在这些示例中,您可以使用任何类型而不是UIView
)
然而,在Swift 3.0中,当我尝试相同的操作时,出现错误:Cannot invoke initializer for type 'UIView?' with no arguments
。它还说存在UIView?
的重载,其中包含这些部分匹配的参数列表:(Wrapped),(nilLiteral: ())。但是,我认为UIView?(nilLiteral: ())
并不是我想要的。当然,还有其他替代方法来完成相同的事情,例如
let x: UIView? = nil
和let x = nil as UIView()
,但它们比我之前使用的方法更冗长。在Swift 3.0中,UIView?()
构造函数被删除了吗?或者它以我尚未发现的形式被替换了吗?
var x: UIView? = nil
或仅使用var x: UIView?
。不要试图想出替代语法。 - Sulthanlet x = UIView?()
的问题在于它看起来与let x = UIView()
非常相似,但却完全不同。你可以为Optional
添加一个init()
扩展来添加初始化方法,但我强烈建议不要这样做。 - Hamish@Sarcoma
语法UIView?
只是Optional<UIView>
的语法糖,因此UIView?()
只是Optional<UIView>.init()
的语法糖。在 Swift 2 中,Optional
的init()
构造一个新的可选值,并将其设置为.None
。所以说,它确实是正确的。然而,在 Swift 3 中,这个初始值设定器已经被移除了,这就是为什么UIView?()
不再起作用的原因。 - Hamish