Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 为什么我们需要指定init方法?_Swift_Swift2 - Fatal编程技术网

Swift 为什么我们需要指定init方法?

Swift 为什么我们需要指定init方法?,swift,swift2,Swift,Swift2,下面的代码块即使没有指定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

下面的代码块即使没有指定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

感谢您的反馈。

这是swift中Struct的行为

请参见中的(结构类型的成员初始值设定项)

“如果 它们不定义任何自己的自定义初始值设定项 默认初始值设定项,结构接收成员初始值设定项 即使存储的属性没有默认值。”

如果您没有指定任何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 ...
    }

}

正如本文件所指出的

Swift为以下结构或类提供默认初始值设定项: 为其所有属性提供默认值,但不提供 至少有一个初始值设定项本身。默认的初始值设定项只是 创建一个新实例,并将其所有属性设置为默认值 价值观

结构类型如果没有,则会自动接收成员初始值设定项 定义他们自己的任何自定义初始值设定项。与默认情况不同 初始值设定项,结构接收成员初始值设定项,即使 它存储的属性没有默认值

因此,如果您编写一个init方法,那么您必须自己编写默认初始值设定项,如果您希望它存在的话

如果您只需要默认的初始值设定项,那么可以省略它。

您不再需要它了。成员初始化是Swift 2.2的一项新功能。作者不是为早期版本的Swift编写了此代码,就是不知道不再需要它。

。。。提供默认值的问题实际上并非如此。