一尘不染

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

swift

在Swift 2.2中,我经常使用类似于的简洁语法声明变量let x = UIView?()。这给出xUIView?类型,并使用对其进行了初始化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(),但是它们比我以前使用的方法更为冗长。UIView?()在Swift 3.0中删除了构造函数,还是以我尚未发现的形式替换了它?


阅读 346

收藏
2020-07-07

共1个答案

一尘不染

以下将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的init()构造一个新的可选值设置为.None。是的,它工作正常。但是在Swift
3中,此初始化程序已被删除,这就是UIView?()不再起作用的原因”

2020-07-07