即使没有指定 init 方法,下面的代码块也可以正常运行。如果是这种情况, init 方法用于什么目的?
struct Person {
var name: String
var age: Int
init(name: String, age: Int){
self.name = name
self.age = age
}
}
let somePerson = Person(name: "Sam", age: 21)
somePerson.name
somePerson.age
感谢您的反馈。
答案 0 :(得分:1)
这是Swift中的Struct的行为。
中的(结构类型的成员初始化器)“结构类型自动接收成员初始化器if 他们没有定义任何自己的自定义初始化程序。不像 默认初始化程序,该结构接收成员初始化程序 即使它存储了没有默认值的属性。“
如果您未指定任何memberwise init方法,它将为您创建。您声明的init允许您执行的操作不仅仅是一个简单的init。例如:
struct Person {
var name: String
var age: Int
init(name: String, age: Int){
self.name = name.uppercaseString()
self.age = age + 22
//and more works ...
}
}
答案 1 :(得分:1)
正如本文所述
Swift为任何结构或类提供默认初始值设定项 提供其所有属性的默认值,但不提供 至少有一个初始化程序本身。简单的默认初始化程序 创建一个新实例,其所有属性都设置为默认值 值。
如果不是,结构类型会自动接收成员初始值设定项 定义任何自己的自定义初始值设定项。与默认值不同 初始化程序,即使结构接收成员初始化程序 它存储了没有默认值的属性。
因此,如果您编写一个init方法,那么您必须自己编写默认初始化程序,如果您希望它存在。
如果您只需要默认初始值设定项,则可以省略它。
答案 2 :(得分:0)
你不再需要它了。成员初始化是Swift 2.2的一个新功能。作者要么为早期版本的Swift编写此代码,要么不知道它已经不再需要了。