2016-04-06 22 views
20

A Superklasse:Wie außer Kraft zu setzen Setter in Swift

class MySuperView : UIView{ 
    var aProperty ; 
} 

Eine Unterklasse Erbe der Superklasse:

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

ich die übergeordnete Klasse der Eigenschaft Setter/Getter-Methode außer Kraft setzen möchten,

wie diese Methode in Swift überschreiben? Bitte hilf mir, danke.

Antwort

35

Was möchten Sie mit Ihrem benutzerdefinierten Setter tun? Wenn Sie die Klasse wollen, bevor etwas tun/nachdem der Wert eingestellt ist, können Sie willSet/didSet verwenden:

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 

Konsolenausgabe:

WillSet aVar bis 5 von 0

didSet aVar to 5 from 0

Wenn Sie jedoch vollständig ändern möchten, wie der Setter mit der Oberklasse interagiert:

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 Ausgabe:

Würde aVar bis 5 von 0

+0

Danke, mein Problem zu lösen gesetzt haben, danke – user5465320

+3

hier Die vollständige Beschreibung von Apple: https://developer.apple.com/library/content/ Dokumentation/Swift/Conceptual/Swift_Programming_Language/Inheritance.html - Überschreiben von Eigenschaften – tim

Verwandte Themen