ฉันกำลังเปลี่ยนแอปพลิเคชันจาก 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
ดังที่คุณจูพูดสิ่งที่ฉันกำลังมองหาคือการใช้วัตถุที่เกี่ยวข้องจริงๆดังนั้นฉันจึงทำ (ในบริบทอื่น):
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()
...
}
}
ความคิดใด ๆ ?