为什么我在Swift中使用Initializers?

时间:2016-09-05 22:27:59

标签: swift initialization init self

我试图了解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来接受函数的参数?

我很困惑,但如果有人可以帮助我,我会非常感激。

1 个答案:

答案 0 :(得分:1)

初始化程序的主要用途是初始化非可选变量。你的类有三个变量 - numberOfSides,name和sideLength。你给numberOfSides一个初始值为零,所以很高兴。但是,name和sideLength没有值,这对于非Optional是“非法的”。因此,必须在初始化器中给出它们的值。例如,如果您在init中注释掉其中一行,则会出现编译错误,因为该变量现在不会被初始化。如果你无法在编译时逻辑确定初始值,那么你可以这样做 - 你可以认为这也是numberOfSides的情况,因为没有没有边的形状。

在你的代码的其他地方,你可能想要验证numberOfSides是否至少为1.这可以通过在编译时使numberOfSides未定义并在init中传递来实现,如果它不是至少1,则你的初始化器可以返回nil(这意味着使用一个可用的初始化器 - init?)。

请注意,在您的情况下,初始化器中传递的名称与类中的名称变量不同。这就是你必须这样做的原因:

    self.name = name

将初始化中传递的名称值复制到类中的变量中。