Bir uygulamayı Objective-C'den Swift'e geçiriyorum, burada saklanan özelliklere sahip birkaç kategorim var, örneğin:
@interface UIView (MyCategory)
- (void)alignToView:(UIView *)view
alignment:(UIViewRelativeAlignment)alignment;
- (UIView *)clone;
@property (strong) PFObject *xo;
@property (nonatomic) BOOL isAnimating;
@end
Swift uzantıları bu gibi depolanmış özellikleri kabul etmediğinden, Objc koduyla aynı yapıyı nasıl koruyacağımı bilmiyorum. Depolanan özellikler uygulamam için gerçekten önemli ve Apple'ın bunu Swift ile yapmak için bazı çözümler yaratmış olması gerektiğine inanıyorum.
Jou'nun söylediği gibi, aradığım şey aslında ilişkili nesneleri kullanmaktı, ben de yaptım (başka bir bağlamda):
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))
}
}
}
Ama şunu yaparken bir EXC_BAD_ACCESS alıyorum:
class UIBubble : UIView {
required init(coder aDecoder: NSCoder) {
...
self.layer.shapeLayer = CAShapeLayer()
...
}
}
Herhangi bir fikir?