为什么要使用初始化程序?

时间:2016-08-11 15:59:57

标签: swift

新手,来自PHP。要温柔。

这是一个带有初始化程序的快速结构

struct Book {
    let title: String
    let author: String
    let price: String
    let pubDate: String

    init(title: String, author: String, price: String, pubDate: String){
        self.title = title
        self.author = author
        self.price = price
        self.pubDate = pubDate
    }

}

let HarryPotter = Book(title: "Harry Potter", author: "JK Rowling",
                       price: "30$", pubDate: "January 10th, 1998")

这是一个没有初始化器的快速结构

struct Book {
    let title: String
    let author: String
    let price: String
    let pubDate: String 
}

let HarryPotter = Book(title: "Harry Potter", author: "JK Rowling",
                       price: "30$", pubDate: "January 10th, 1998")

如果这两者都做同样的事情,那么使用初始化程序有什么好处?

4 个答案:

答案 0 :(得分:3)

在第二种情况下,您仍然使用初始化程序。您正在使用为您生成的default initializer,因为您尚未指定自己的任何内容。

  

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

回答初始化的更一般的问题:它们封装了实例的初始化,并保证你永远不能在一个半成品中获得一个实例"州。他们的Swift相当于PHP Constructors

答案 1 :(得分:1)

在您的具体情况下,没有,因为您的所有初始化程序正在进行设置值。但是,你可能在初始化器中有其他代码实际上有所作为。

答案 2 :(得分:0)

如果你想预先包含一些逻辑,你可以在构造函数/初始化器中完成。

答案 3 :(得分:-1)

这是一个猜测,因为我是Ruby开发人员而不是Swift,但有时您可能希望在初始化程序中运行更多(任意)代码,只需将参数值分配给实例变量。例如:

def initialize(attr)
  @attr = attr
  puts "I'm initializing!"
end

在上面的例子中,我已经分配了属性并打印到stdout。我在Swift中猜测所有属性赋值都是自动完成的,所以如果你想做的就是分配属性,你可以避免自己编写初始化程序,让Swift处理它。