为什么我在 Swift 中使用初始化器?
Why do I use Initializers in Swift?
我正在努力了解 Swift 中的初始值设定项。我有点明白他们做什么,但我不明白为什么我需要他们。
例如:(来自苹果文档)
class NamedShape {
var numberOfSides = 0
var name: String
var sideLength: Double
init(name: String, sideLength: Double) {
self.name = name
self.sideLenght = sideLength
}
}
如果 init 应该设置一个初始值,self.sideLength
不应该等于实际值,而应该只是 "sideLength"。或者我是否需要创建一个 init 来接收函数的参数?
我很困惑,但如果有人能帮助我,我将不胜感激。
初始化器的主要目的是初始化非可选变量。您的 class 具有三个变量 - numberOfSides、name 和 sideLength。你给 numberOfSides 一个初始值零,所以它很高兴。但是,name 和 sideLength 没有值,对于非 Optional 来说是 "illegal"。因此,必须在初始化程序中为它们赋值。例如,如果您注释掉 init 中的一行,您将得到一个编译错误,因为该变量现在不会被初始化。当您无法在编译时从逻辑上确定初始值时,您会这样做 - 您可能会争辩说 numberOfSides 也是这种情况,因为没有没有边的形状。
在您的代码的其他地方,您可能想要验证 numberOfSides 至少为 1。这可以通过在编译时未定义 numberOfSides 并传入 init 来实现,如果它不至少为 1,则您的初始化程序可以 return nil(这意味着使用可失败的初始化程序 - init?)。
请注意,在您的情况下,初始化程序中传递的名称与 class 中的名称变量不同。这就是为什么你必须这样做:
self.name = name
将初始化程序中传递的名称值复制到class中的变量中。
我正在努力了解 Swift 中的初始值设定项。我有点明白他们做什么,但我不明白为什么我需要他们。
例如:(来自苹果文档)
class NamedShape {
var numberOfSides = 0
var name: String
var sideLength: Double
init(name: String, sideLength: Double) {
self.name = name
self.sideLenght = sideLength
}
}
如果 init 应该设置一个初始值,self.sideLength
不应该等于实际值,而应该只是 "sideLength"。或者我是否需要创建一个 init 来接收函数的参数?
我很困惑,但如果有人能帮助我,我将不胜感激。
初始化器的主要目的是初始化非可选变量。您的 class 具有三个变量 - numberOfSides、name 和 sideLength。你给 numberOfSides 一个初始值零,所以它很高兴。但是,name 和 sideLength 没有值,对于非 Optional 来说是 "illegal"。因此,必须在初始化程序中为它们赋值。例如,如果您注释掉 init 中的一行,您将得到一个编译错误,因为该变量现在不会被初始化。当您无法在编译时从逻辑上确定初始值时,您会这样做 - 您可能会争辩说 numberOfSides 也是这种情况,因为没有没有边的形状。
在您的代码的其他地方,您可能想要验证 numberOfSides 至少为 1。这可以通过在编译时未定义 numberOfSides 并传入 init 来实现,如果它不至少为 1,则您的初始化程序可以 return nil(这意味着使用可失败的初始化程序 - init?)。
请注意,在您的情况下,初始化程序中传递的名称与 class 中的名称变量不同。这就是为什么你必须这样做:
self.name = name
将初始化程序中传递的名称值复制到class中的变量中。