2015-09-24 10 views
7

Swift (dal libro "iOS animazioni per Tutorial: Capitolo 12" rilasciato da http://www.raywenderlich.com/):Come implementare il "didset of swift" nell'obiettivo-c?

let photoLayer = CALayer() 

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

Come posso implementare la sintassi di cui sopra in Objective-C? So solo per impostare la proprietà di photoLayer e immagine come di seguito:

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

Ma io non so come implementare didset{...} parti utilizzando la sintassi Objective-C, per favore aiutatemi!

+0

controllare questo ... http: //stackoverflow.com/questions/26674111/ib-designable-ibinspectable-interface-builder-does-not-upate –

+0

Si prega di non arrestarsi rapidamente se l'immagine è nil. –

+0

in objc che chiama un oggetto nil funziona, ma in rapido potrebbe essere 'photoLayer.contents = image! = Nil? image.CGImage: nil' –

risposta

16

esclude il programmatore e implementa il setter da solo.

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

Swift ha bisogno di caratteristiche speciali di lingua per questo, a causa della sua natura statica, non si può sottoclasse in fase di esecuzione.

In Objective-C questo non è necessario, quindi non è disponibile alcuna funzione di lingua. È possibile utilizzare key-value observation.

Ma se l'istanza di osservazione è l'istanza di cui è stata modificata la proprietà, è possibile farlo con la sottoclasse come indicato da @ Daij-Djan. (Fondamentalmente questo è ciò che fai in Swift.) Inoltre in Objective-C hai la possibilità di osservare le proprietà di una diversa istanza di una classe diversa.