新手,来自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")
如果这两者都做同样的事情,那么使用初始化程序有什么好处?
答案 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处理它。