swift - 如何在 swift 中更改子类中的属性值?

标签 swift inheritance subclass getter-setter

根据swift language guide的Inheritance章节,我尝试在子类中编写计算的peoperty。当我将 newValue 设置为类实例的属性时,setter 似乎起作用,而属性值并未转换为 newValue。

class Vehicle {
    var currentSpeed = 1.0
    var description: String {
        return "The current speed is \(currentSpeed) miles per hour"
    }
    func makeNoise() {
    }
}
class Car: Vehicle {
    var gear = 0
    override var description: String {
        return super.description + " in gear \(gear)"
    }
}
class AutomaticCar: Car {
    override var currentSpeed: Double {
        get {
            return super.currentSpeed
        }
        set {
            gear = Int(newValue/10) + 1
        }
    }
}

let automaticCar = AutomaticCar()
automaticCar.currentSpeed = 12.0
print(automaticCar.currentSpeed)//It prints "1.0"
print(automaticCar.description)//It prints "The current speed is 1.0 miles per hour in gear 2"

automaticCar.currentSpeed 的属性值仍然是“1.0”而不是“12.0”,而实例的 gear 属性似乎有效。我已经搜索过了,没有找到答案,是什么原理导致了这种情况?

进一步的问题:

class A {
    var test1 = 1
    var test2 = 2
    var sum: Int {
        get {
            return test1 + test2
        }
        set {
            test1 = newValue - test2
        }
    }
}
var a = A()
print(a.sum)
a.sum = 4
print(a.sum)//It ptints "4"
print(a.test1)//It prints "2"

在这种情况下,我不需要刻意设置新的 sum 属性的值,这两种情况有什么区别?

最佳答案

class AutomaticCar: Car {
    override var currentSpeed: Double {
        get {
            return super.currentSpeed
        }
        set {
            super.currentSpeed = newValue
            gear = Int(newValue/10) + 1
        }
    }
}

您刚刚忘记在覆盖的 setter 中设置 currentSpeed 的值。

关于swift - 如何在 swift 中更改子类中的属性值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50024485/

相关文章:

ios - 拆分 Swift 字符串复杂

java - 如何使具有有界类型参数的方法排除一个子类?

c++ - 从模板化基类模板化子类时出错

cocoa - NSTextView 子类 - A4 纸外观

python - 继承 : Base class method which returns an instance of itself

ios - 从核心数据获取图像

ios - Swift 参数中的默认关键字

swift - Xcode Playground 只能部分运行

java - 如何判断派生类的类型?

Java父类(super class)变量和子类复制构造函数问题