编辑代码



/*1使用let添加一个常量属性,再添加一个接收参数的方法*/
class Shape {
     var numberOfSides =0
     func  simpleDescription () -> String {
         return "A shape with \(numberOfSides) sides."
     }
}

/*2*/
var shape =Shape()
shape.numberOfSides =7
var simpleDescription =shape.simpleDescription()

/*3使用init创建一个构造器*/
class NamedShape {
    var numberOfSides: Int =0
    var name: String 

    init (name :String){
         self.name =name
    } 
    funce simpleDescription () ->String{
        return "A shape with \(numberOfSides) sides."
    }
}


/*4创建NamedShape的另一个子类Circle,构造器接收两个参数:一个是半径,一个是名称,在子类Circle中实现area()和simpleDescription()方法。*/
class Square: NamedShape {
    var sideLwngth: 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()
teat.simpleDescription()

/*5除了储存简单的属性之外,属性可以有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 triagle with sides of length \(sideLength)."
            }
}

var triangle=EquilateralTriangle(sideLength: 3.1, name: "a triangle")
print(triangle.perimeter)
triangle.perimeter = 9.9
print(trianqle.sideLength)


/*6如果不需要计算属性,但仍然需要在设置一个新值之前或之后运行代码,使用willSet和didSet*/
calss TriangleAndSquare {
    var triangle: EquilateralTriangle {
        willSet {
            square.sideLength = newValue.sideLength
        }
    }
    var square: Square {
        willSet {
            triangle.sideLength = newValue.sideLength
        }
    }
    int(size: Double, name: String) {
        square = Square(sideLength: size, name: name)
        triangle = EquilateralTriangle(sideLength: size, name: name)
    }
}
var triangleAadSquare = TriangleAadSquare(size: 10, name: "another test shape")
print(triangleAadSquare.square.sideLength)
print(triangleAadSquare.triangle.sideLength)
triangleAadSquare.square = Square(sideLength: 50, name: "larger square")
print(triangleAadSquare.triangle.sideLength)