"init" 在 swift 中有什么用?
What's "init" used for in swift?
有区别吗?以及 deinit 的效果 ?
结构标记{
变量标记:整数
}
结构标记{
变量标记:整数
初始化(标记:Int){
self.mark = 标记
}
}
init
用于在创建 struct
或 class
类型时为属性设置初始值,在任何其他方法可能被调用之前和之前它作为参数传递给其他函数或方法。
在 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
方法都将被调用,并且它将从内存中释放。它用于在实例被销毁之前从各种观察模式中注销或以其他方式清理。
有区别吗?以及 deinit 的效果 ?
结构标记{ 变量标记:整数 }
结构标记{ 变量标记:整数 初始化(标记:Int){ self.mark = 标记 } }
init
用于在创建 struct
或 class
类型时为属性设置初始值,在任何其他方法可能被调用之前和之前它作为参数传递给其他函数或方法。
在 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
方法都将被调用,并且它将从内存中释放。它用于在实例被销毁之前从各种观察模式中注销或以其他方式清理。