Ich wechsle eine Anwendung von Objective-C zu Swift, für die ich einige Kategorien mit gespeicherten Eigenschaften habe, zum Beispiel:
@interface UIView (MyCategory)
- (void)alignToView:(UIView *)view
alignment:(UIViewRelativeAlignment)alignment;
- (UIView *)clone;
@property (strong) PFObject *xo;
@property (nonatomic) BOOL isAnimating;
@end
Da Swift-Erweiterungen solche gespeicherten Eigenschaften nicht akzeptieren, weiß ich nicht, wie ich die gleiche Struktur wie der Objc-Code beibehalten soll. Gespeicherte Eigenschaften sind für meine App sehr wichtig, und ich glaube, Apple muss eine Lösung dafür in Swift erstellt haben.
Wie von jou gesagt, suchte ich tatsächlich nach zugehörigen Objekten, also tat ich es (in einem anderen Kontext):
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))
}
}
}
Aber ich bekomme eine EXC_BAD_ACCESS, wenn ich mache:
class UIBubble : UIView {
required init(coder aDecoder: NSCoder) {
...
self.layer.shapeLayer = CAShapeLayer()
...
}
}
Irgendwelche Ideen?