我正在将一个应用程序从 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 扩展不接受这样的存储属性,我不知道如何维护与 Object 代码相同的结构。存储属性对我的应用程序来说非常重要,我相信苹果一定已经在 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()
...
}
}
有什么想法吗?