Swift 3.0中的UIView()构造函数发生了什么?
在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(),但是它们比我以前使用的方法更为冗长。UIView?()
在Swift 3.0中删除了构造函数,还是以我尚未发现的形式替换了它?
回答:
以下将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?()不再起作用的原因”
以上是 Swift 3.0中的UIView()构造函数发生了什么? 的全部内容, 来源链接: utcz.com/qa/400671.html