Как реализовать "didset of swift" в target-c?

Swift (из книги 《iOS Animations от Tutorials:Chapter 12》, выпущенной http://www.raywenderlich.com/):

let photoLayer = CALayer()

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

Как я могу реализовать вышеупомянутый синтаксис в target-c? Я знаю только, чтобы установить свойство photoLayer и изображения, как показано ниже:

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

Но я не знаю, как реализовать didset{...} части с использованием синтаксиса target-c, пожалуйста, помогите!

2 ответа

Переопределите сеттер и внедрите его самостоятельно.

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

Для этого Swift нужны специальные языковые функции, поскольку из-за его статичности нельзя создавать подклассы во время выполнения.

В Objective-C это не обязательно, поэтому у вас нет языковой функции для этого. Вы можете использовать наблюдение значения ключа.

Но если наблюдающий экземпляр является экземпляром, свойство которого изменилось, вы можете сделать это с помощью подклассов, как упомянуто @Daij-Djan. (В основном это то, что вы делаете в Swift.) Кроме того, в Objective-C у вас есть возможность наблюдать свойства другого экземпляра другого класса.

Другие вопросы по тегам