我试图了解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来接受函数的参数?
我很困惑,但如果有人可以帮助我,我会非常感激。
答案 0 :(得分:1)
初始化程序的主要用途是初始化非可选变量。你的类有三个变量 - numberOfSides,name和sideLength。你给numberOfSides一个初始值为零,所以很高兴。但是,name和sideLength没有值,这对于非Optional是“非法的”。因此,必须在初始化器中给出它们的值。例如,如果您在init中注释掉其中一行,则会出现编译错误,因为该变量现在不会被初始化。如果你无法在编译时逻辑确定初始值,那么你可以这样做 - 你可以认为这也是numberOfSides的情况,因为没有没有边的形状。
在你的代码的其他地方,你可能想要验证numberOfSides是否至少为1.这可以通过在编译时使numberOfSides未定义并在init中传递来实现,如果它不是至少1,则你的初始化器可以返回nil(这意味着使用一个可用的初始化器 - init?)。
请注意,在您的情况下,初始化器中传递的名称与类中的名称变量不同。这就是你必须这样做的原因:
self.name = name
将初始化中传递的名称值复制到类中的变量中。