swift - 如何在 Swift 中覆盖 setter

标签 swift overriding setter getter

父类(super class):

class MySuperView : UIView{
    var aProperty ;
}

子类继承父类:

class Subclass : MySuperClass{
    // I want to override the aProperty's setter/getter method
}

我想覆盖父类(super class)属性的 setter/getter 方法,

如何在 Swift 中覆盖这个方法?请帮助我,谢谢。

最佳答案

你想用你的自定义二传手做什么?如果你想让类在设置值之前/之后做一些事情,你可以使用willSet/didSet:

class TheSuperClass { 
   var aVar = 0 
} 

class SubClass: TheSuperClass { 
     override var aVar: Int { 
         willSet { 
            print("WillSet aVar to \(newValue) from \(aVar)") 
        } 
        didSet { 
            print("didSet aVar to \(aVar) from \(oldValue)") 
        } 
    } 
} 


let aSub = SubClass()
aSub.aVar = 5

Console Output:

WillSet aVar to 5 from 0

didSet aVar to 5 from 0

但是,如果您想完全改变 setter 与父类(super class)交互的方式:

class SecondSubClass: TheSuperClass { 
     override var aVar: Int { 
        get {
            return super.aVar
        }
        set { 
            print("Would have set aVar to \(newValue) from \(aVar)") 
        } 
    } 
} 

let secondSub = SecondSubClass()
print(secondSub.aVar)
secondSub.aVar = 5
print(secondSub.aVar)

Console output:

0

Would have set aVar to 5 from 0

0

关于swift - 如何在 Swift 中覆盖 setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36440631/

相关文章:

ios - 使用 Picker View - setter、getter 混淆的概念

java - 卡在 java setter 方法上

ios - Swift:当我转到另一个 View Controller 时,内存未清除,收到内存警告

ios - Swift URL 字符串编码在 iOS 上崩溃?

java - 代码如何在方法覆盖中流动

c++ - 成员函数指针作为构造函数参数

ios - 如何观察Backendless数据库的属性变化? - swift

swift - 类型不符合协议(protocol) 'Decodable'/'Encodable'

c# - 如何使用 XmlAttributeOverrides 覆盖集合元素的 xml 元素名称?

java - 父子层次结构在重写时对抛出很重要吗?