Swift - 类级实例化和方法级实例化之间的差异

时间:2016-12-20 23:43:56

标签: swift instance-variables

以下用法有什么区别?有区别吗?

class B { }

// usage 1
class A {
    var b: B = B();
}

// usage 2
class A {
   var b: B!

   init() {
      self.b = B()
   }
}

编辑: 一些答案指出,在使用2中,该值不需要是可选的,因为它在初始化器中得到一个值。

3 个答案:

答案 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中,bimplicitly unwrapped optional。当你这样做时:

let a = A()

然后在两种情况下都会设置a.b,但在使用2中,有人可以这样做:

a.b = nil

如果您尝试使用它,那么您将收到错误。