codingiran
codingiran

Reputation: 423

How to implement the "didset of swift" in objective-c?

Swift (from the book 《iOS Animations by Tutorials:Chapter 12》 released by http://www.raywenderlich.com/):

let photoLayer = CALayer()

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

How can I implement the above syntax in objective-c? I know only to set the property of photoLayer and image like below:

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

But i do not know how to implement didset{...} parts using objective-c syntax, please help!

Upvotes: 25

Views: 15725

Answers (2)

Daij-Djan
Daij-Djan

Reputation: 50089

override the setter and implement the setter yourself.

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

Upvotes: 45

Amin Negm-Awad
Amin Negm-Awad

Reputation: 16650

Swift needs special language features for this, because of its static nature, one cannot subclass at runtime.

In Objective-C this is not necessary, so you have no language feature for this. You can use key-value observation.

But if the observing instance is the instance whose property changed, you can do it with subclassing as mentioned by @Daij-Djan. (Basically this is what you do in Swift.) Additionally in Objective-C you have the ability to observe the properties of a different instance of a different class.

Upvotes: 3

Related Questions