Как реализовать "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 у вас есть возможность наблюдать свойства другого экземпляра другого класса.