Я перемикаю програму з Objective-C на Swift, у якої є пара категорій із збереженими властивостями, наприклад:
@interface UIView (MyCategory)
- (void)alignToView:(UIView *)view
alignment:(UIViewRelativeAlignment)alignment;
- (UIView *)clone;
@property (strong) PFObject *xo;
@property (nonatomic) BOOL isAnimating;
@end
Оскільки розширення Swift не приймають такі збережені властивості, я не знаю, як підтримувати ту саму структуру, що і код Objc. Збережені властивості дуже важливі для мого додатка, і я вважаю, що Apple, мабуть, створила якесь рішення для цього в Swift.
За словами jou, те, що я шукав, насправді використовував пов'язані об'єкти, так я і зробив (в іншому контексті):
import Foundation
import QuartzCore
import ObjectiveC
extension CALayer {
var shapeLayer: CAShapeLayer? {
get {
return objc_getAssociatedObject(self, "shapeLayer") as? CAShapeLayer
}
set(newValue) {
objc_setAssociatedObject(self, "shapeLayer", newValue, UInt(OBJC_ASSOCIATION_RETAIN))
}
}
var initialPath: CGPathRef! {
get {
return objc_getAssociatedObject(self, "initialPath") as CGPathRef
}
set {
objc_setAssociatedObject(self, "initialPath", newValue, UInt(OBJC_ASSOCIATION_RETAIN))
}
}
}
Але я отримую EXC_BAD_ACCESS під час виконання:
class UIBubble : UIView {
required init(coder aDecoder: NSCoder) {
...
self.layer.shapeLayer = CAShapeLayer()
...
}
}
Будь-які ідеї?