具有第一个结构:
struct example {
var name: String
var number: Int
func show (data: String) {
print(data)
}
}
let obj = example(name: "Hello World", number: 2)
第二个结构:
struct example2 {
var nameModified: String
var numberModified: Int
init(nameFrom: String, numberFrom: Int) {
nameModified = nameFrom + "World"
numberModified = numberFrom + 1
}
}
let obj2 = example2(nameFrom: "Hello", numberFrom: 1)
我看不到拥有初始化方法和没有初始化方法之间的区别。 我可能没有看到正确的功能。有谁能指出我正确的方向?
谢谢!
答案 0 :(得分:4)
在结构中,根据结构的属性推断默认的初始化函数。
因此,您可以编写此init函数,也可以将其忽略:
init(nameFrom: String, numberFrom: Int) { ... }
显式添加init函数的好处是,如果您要这样做,则可以在init函数中执行代码。
另外,您当然可以添加自定义convenience init
函数。
但是请注意,这不是类的功能。对于这些,您将始终必须显式编写一个初始化程序。
您可以放心地做:
struct Example {
var name: String
var number: Int
}
...但是:
class Example {
var name: String
var number: Int
}
...将引发以下错误:
“示例”类没有初始化程序
相反,您必须这样做:
class Example {
var name: String
var number: Int
init(name: String, number: Int) {
self.name = name
self.number = number
}
}
但是,如果要为类内的属性提供默认值,则不必编写显式的初始化程序:
class Example {
var name: String?
var number: Int = 0
}
答案 1 :(得分:2)
使用Swift,符合以下条件的类和结构都包含默认的初始化程序。
Swift为任何结构或类提供默认的初始化程序 提供其所有属性的默认值,但不提供 至少一个初始化程序本身。默认的初始值设定项 创建一个所有其属性均设置为其默认值的新实例 值。
https://docs.swift.org/swift-book/LanguageGuide/Initialization.html