以下用法有什么区别?有区别吗?
class B { }
// usage 1
class A {
var b: B = B();
}
// usage 2
class A {
var b: B!
init() {
self.b = B()
}
}
编辑: 一些答案指出,在使用2中,该值不需要是可选的,因为它在初始化器中得到一个值。
答案 0 :(得分:3)
实例化以赋值语句的声明顺序完成。但是类级语句(存储属性)在方法级语句之前完成:
*
答案 1 :(得分:0)
假设使用2中的额外!
不是您想要的,没有绝对没有区别
// usage 1
class A {
var b: B = B();
}
和
// usage 2
class A {
var b: B
init() {
self.b = B()
}
}
它完全一样。
答案 2 :(得分:-1)
是的,这两者之间存在巨大差异。在使用情况2中,b
是implicitly unwrapped optional。当你这样做时:
let a = A()
然后在两种情况下都会设置a.b
,但在使用2中,有人可以这样做:
a.b = nil
如果您尝试使用它,那么您将收到错误。