试图理解swift子类中的超级属性

时间:2016-01-04 03:15:01

标签: swift class

我正在学习swift,我尝试在初始化子类时理解super属性的使用

示例代码:

class Square: NamedShape {
    var sideLength: Double

    init(sideLength: Double, name: String) {
        self.sideLength = sideLength
        super.init(name: name)
        numberOfSides = 4
    }

    func area() ->  Double {
        return sideLength * sideLength
    }

    override func simpleDescription() -> String {
        return "A square with sides of length \(sideLength)."
    }
}
let test = Square(sideLength: 5.2, name: "my test square")
test.area()
test.simpleDescription()

2 个答案:

答案 0 :(得分:1)

在您的示例中,super调用init的{​​{1}}方法,即NamedShape的超类。此方法负责初始化所有Square所需的属性并执行任何其他设置。

您尚未发布此类的代码,但看起来此方法可能会设置NamedShape的默认值并存储numberOfSides的值。

Swift Initialization docs提供了更多详细信息。

答案 1 :(得分:1)

Swift中的

super基本上意味着"超类"。什么是超类?在这种情况下,NamedShapeSquare的超类。

在超类中,有一个初始化器:

init(name: String) {
    //code not given so I cannot tell you want is in here
    //You just need to know that there is an initializer.
}

你的Square类被称为"子类" NamedShape。在子类中,您也声明了初始化器。

init(sideLength: Double, name: String) {
    self.sideLength = sideLength
    super.init(name: name)
    numberOfSides = 4
}

在子类初始化程序中,您调用super.init。这就是它的含义,

  

嘿超类!我想调用您的初始值设定项来帮助我初始化此Square,我会给您所需的参数 - name

所以超类初始化程序完成了他的工作并帮助你初始化Square

这被称为"初始化者授权"。