Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Swift中覆盖setter_Swift_Overriding_Setter_Getter - Fatal编程技术网

如何在Swift中覆盖setter

如何在Swift中覆盖setter,swift,overriding,setter,getter,Swift,Overriding,Setter,Getter,超类: class MySuperView : UIView{ var aProperty ; } 超类的子类继承: class Subclass : MySuperClass{ // I want to override the aProperty's setter/getter method } 我想重写超类属性的setter/getter方法 如何在Swift中重写此方法?请帮帮我,谢谢 您想用自定义设置器做什么?如果希望类在设置值之前/之后执行某些操作,可以使用wil

超类:

class MySuperView : UIView{
    var aProperty ;
}
超类的子类继承:

class Subclass : MySuperClass{
    // I want to override the aProperty's setter/getter method
}
我想重写超类属性的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
控制台输出:

将aVar从0设置为5

已将aVar从0设置为5

但是,如果要完全更改setter与超类的交互方式:

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)
控制台输出:

0

将aVar从0设置为5

0


下面是Apple的完整描述:-重写属性在第二个示例中,您还可以调用
super.aVar=newValue
来获取超类的原始行为。