如何在Swift中存储属性,就像我在Objective-C上一样?
我正在将一个应用程序从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 Foundationimport QuartzCoreimport ObjectiveCextension 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()
...
}}有任何想法吗?
海绵宝宝撒