为什么在Swift中需要使用初始值设定项?
具有第一个结构:为什么在Swift中需要使用初始值设定项?,swift,Swift,具有第一个结构: 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 numberMod
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)
我看不出有初始化方法和没有它之间的区别。
可能我没有看到它的正确功能。有人能给我指出正确的方向吗
谢谢 在结构中,默认的init函数是根据结构的属性推断出来的。
因此,您可以编写这个init函数,也可以不编写它:
init(nameFrom: String, numberFrom: Int) { ... }
显式添加init函数的好处是,如果您愿意,您可以在init函数中执行代码。当然,您还可以添加自定义
便利init
函数
但是,请注意,这不是类的特性。对于这些,您将始终必须显式地编写初始值设定项
您可以安全地执行以下操作:
struct Example {
var name: String
var number: Int
}
……然而:
class Example {
var name: String
var number: Int
}
…将引发以下错误:
类“Example”没有初始值设定项
相反,您必须执行以下操作:
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
}
对于Swift,符合以下条件的类和结构都包含默认初始值设定项 Swift为以下结构或类提供默认初始值设定项: 为其所有属性提供默认值,但不提供 至少有一个初始值设定项本身。默认的初始值设定项只是 创建一个新实例,并将其所有属性设置为默认值 价值观
您总是至少有一个初始值设定项,只是不总是为
struct
ure显式编写。但它总是在那里。请阅读Swift手册。你来自哪种语言?