什么" init"用于swift?

时间:2017-01-21 01:00:03

标签: swift initialization init initializer

有区别吗?和deinit的影响?

struct mark {        var mark:Int }

struct mark {        var mark:Int        init(mark:Int){           self.mark = mark        } }

1 个答案:

答案 0 :(得分:4)

init用于在创建structclass类型的属性时为其设置初始值,之后可以在其上调用任何其他方法之前和之前作为参数传递给其他函数或方法。

在Swift中,必须在init返回之前使用初始值设置任何非可选属性。可以使用初始值声明属性,从而排除它们必须在init方法中设置。

    如果有任何非可选属性尚未使用初始值声明,则
  • class类型必须实现init方法。

  • 仅对于struct类型,Swift将自动生成一个init方法,其中包含尚未使用初始值声明的每个非可选属性的参数。您可以选择为结构创建任意数量的替代init方法,只要每个方法返回时,所有非可选属性都具有值。

  • 在您的示例中,第二行创建的init方法与Swift为该init类型提供的自动创建的struct方法没有区别。但您可以创建备用初始值设定项,例如,使用Double而不是Int,然后在设置mark属性之前将其转换为内部。

我认为要实现的关键点是,即使您没有自己指定init方法,仍然存在,由Swift自动为struct类型创建。因此,在您的示例的第一行和第二行中,正在调用init方法(并且它们本质上是相同的实现)。唯一的区别是在第二行写了init实现,而Swift编译器在第一行写了init方法。

deinit仅存在于class类型,它们通过引用传递并具有内存管理。当您创建的deinit上声明的任何class方法将在没有对class的该实例的更多引用时被调用,并且它将从内存中释放。在实例销毁之前,它已用于取消注册各种观察模式或以其他方式进行清理。