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

时间:2016-06-21 17:05:56

标签: 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.name
somePerson.age

感谢您的反馈。

3 个答案:

答案 0 :(得分:1)

这是Swift中的Struct的行为。

请参阅https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html

中的(结构类型的成员初始化器)
  

“结构类型自动接收成员初始化器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 initializers

  

Swift为任何结构或类提供默认初始值设定项   提供其所有属性的默认值,但不提供   至少有一个初始化程序本身。简单的默认初始化程序   创建一个新实例,其所有属性都设置为默认值   值。

     

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

因此,如果您编写一个init方法,那么您必须自己编写默认初始化程序,如果您希望它存在。

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

答案 2 :(得分:0)

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