Swift编程语言入门教程

2020-01-08 22:44:24王旭

    }
}
 
let test = Square(sideLength: 5.2, name: "my test square")
test.area()
test.simpleDescription()

 

Note

练习

编写另一个 NamedShape 的子类叫做 Circle ,接受半径和名字到其构造器。实现 area 和 describe 方法。

属性可以有 getter 和 setter 。

 

复制代码
class EquilateralTriangle: NamedShape {
    var sideLength: Double = 0.0
 
    init(sideLength: Double, name: String) {
        self.sideLength = sideLength
        super.init(name: name)
        numberOfSides = 3
    }
 
    var perimeter: Double {
    get {
        return 3.0 * sideLength
    }
    set {
        sideLength = newValue / 3.0
    }
    }
 
    override func simpleDescription() -> String {
        return "An equilateral triangle with sides of length (sideLength)."
    }
}
 
var triangle = EquilateralTriangle(sideLength: 3.1, name: "a triangle")
triangle.perimeter
triangle.perimeter = 9.9
triangle.sideLength

 

在 perimeter 的 setter 中,新的值的名字就是 newValue 。你可以提供一个在 set 之后提供一个不冲突的名字。

注意 EquilateralTriangle 的构造器有3个不同的步骤:

设置属性的值 
调用超类的构造器 
改变超类定义的属性的值,添加附加的工作来使用方法、getter、setter也可以在这里 
如果你不需要计算属性,但是仍然要提供在设置值之后执行工作,使用 willSet 和 didSet 。例如,下面的类要保证其三角的边长等于矩形的变长。

 

复制代码
class TriangleAndSquare {
    var triangle: EquilaterTriangle {
    willSet {
        square.sideLength = newValue.sideLength