web-dev-qa-db-ja.com

Objective-cで「Swiftのdidset」を実装するにはどうすればよいですか?

スウィフト( http://www.raywenderlich.com/ によってリリースされた本《 iOS Animations by Tutorials:Chapter 12》から):

let photoLayer = CALayer()

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

上記の構文をobjective-cに実装するにはどうすればよいですか?私は以下のようにphotoLayerとimageのプロパティを設定することだけを知っています:

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

しかし、objective-c構文を使用してdidset{...}パーツを実装する方法がわかりません。助けてください。

16
codingiran

セッターをオーバーライドし、セッターを自分で実装します。

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

Swiftは静的な性質のため、実行時にサブクラス化できないため、このために特別な言語機能が必要です。

Objective-Cではこれは必要ないため、このための言語機能はありません。 キー値観測 を使用できます。

ただし、監視しているインスタンスがプロパティが変更されたインスタンスである場合は、@ Daij-Djanによって言及されているサブクラス化を使用してそれを行うことができます。 (基本的に、これはSwiftで行うことです。)さらに、Objective-Cでは、異なるクラスの異なるインスタンスのプロパティを監視することができます。

2
Amin Negm-Awad