Przełączam aplikację z Objective-C na Swift, w której mam kilka kategorii z przechowywanymi właściwościami, na przykład:
@interface UIView (MyCategory)
- (void)alignToView:(UIView *)view
alignment:(UIViewRelativeAlignment)alignment;
- (UIView *)clone;
@property (strong) PFObject *xo;
@property (nonatomic) BOOL isAnimating;
@end
Ponieważ rozszerzenia Swift nie akceptują przechowywanych właściwości, takich jak te, nie wiem, jak zachować tę samą strukturę, co kod Objc. Przechowywane właściwości są naprawdę ważne dla mojej aplikacji i uważam, że firma Apple musiała opracować jakieś rozwiązanie do robienia tego w Swift.
Jak powiedział jou, w rzeczywistości szukałem powiązanych obiektów, więc zrobiłem (w innym kontekście):
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))
}
}
}
Ale dostaję EXC_BAD_ACCESS, gdy robię:
class UIBubble : UIView {
required init(coder aDecoder: NSCoder) {
...
self.layer.shapeLayer = CAShapeLayer()
...
}
}
Jakieś pomysły?