"init" 在 swift 中有什么用?

What's "init" used for in swift?

有区别吗?以及 deinit 的效果 ?

结构标记{ 变量标记:整数 }

结构标记{ 变量标记:整数 初始化(标记:Int){ self.mark = 标记 } }

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

在 Swift 中,任何 non-optional 属性必须在 init returns 之前设置初始值。属性可能已经声明了初始值,这使得它们不必在 init 方法中设置。

  • class 类型必须实现 init 方法,如果有任何 non-optional 属性尚未声明初始值。

  • 仅针对 struct 类型,Swift 将自动为每个 non-optional 属性 生成带有参数的 init 方法尚未声明初始值。您可以选择为结构创建任意数量的替代 init 方法,只要到每个 returns 时,所有 non-optional 属性都有一个值。

  • 在您的示例中,第二行创建的 init 方法与为该 struct 提供的自动创建的 init 方法没有区别按 Swift 输入。但是您可以创建备用初始化器,例如,采用 Double 而不是 Int,然后在设置 mark 属性.

    之前在内部转换它

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

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