2015-09-24 11 views
7

Swift (aus dem Buch "iOS Animationen von Tutorials: Kapitel 12" veröffentlicht von http://www.raywenderlich.com/):Wie implementiert man das "didset von swift" in objective-c?

let photoLayer = CALayer() 

@IBInspectable 
    var image: UIImage! { 
    didSet { 
     photoLayer.contents = image.CGImage 
    } 
} 

Wie kann ich die obige Syntax in Objective-c implementieren? Ich weiß nur, wie unten die Eigenschaft Fotoschicht und Bild zu setzen:

@property (strong, nonatomic) CALayer *photoLayer; 
@property (strong, nonatomic) IBInspectable UIImage *image; 

Aber ich weiß nicht, wie didset{...} Teile Objective-C-Syntax zu implementieren, bitte helfen!

+0

überprüfen Sie dies ... http: //stackoverflow.com/questions/26674111/ib-designable-ibinspectable-interface-builder-does-not-update –

+0

bitte nicht dies wird in Swift abstürzen, wenn Bild ist Null. –

+0

in Objc Aufruf eines Null-Objekts funktioniert, aber in swift konnte es sein 'photoLayer.contents = image! = Nil? image.CGImage: nil' –

Antwort

16

überschreiben Sie den Setter und implementieren Sie den Setter selbst.

- (void)setImage:(UIImage*)image { 
    _image = image; 
    photoLayer.contents = image.CGImage 
} 
2

Swift benötigt spezielle Sprachfunktionen, aufgrund seiner statischen Eigenschaften kann man zur Laufzeit keine Unterklassen erstellen.

In Objective-C ist dies nicht notwendig, Sie haben also keine Sprachfunktion dafür. Sie können key-value observation verwenden.

Wenn die beobachtende Instanz jedoch die Instanz ist, deren Eigenschaft sich geändert hat, können Sie dies mit Unterklassen tun, wie von @ Daij-Djan erwähnt. (Dies ist das, was Sie in Swift tun.) Zusätzlich haben Sie in Objective-C die Möglichkeit, die Eigenschaften einer anderen Instanz einer anderen Klasse zu beobachten.

Verwandte Themen