Tôi đang chuyển đổi một ứng dụng từ Objective-C sang Swift, ví dụ tôi có một vài loại với các thuộc tính được lưu trữ:
@interface UIView (MyCategory)
- (void)alignToView:(UIView *)view
alignment:(UIViewRelativeAlignment)alignment;
- (UIView *)clone;
@property (strong) PFObject *xo;
@property (nonatomic) BOOL isAnimating;
@end
Vì các tiện ích mở rộng Swift không chấp nhận các thuộc tính được lưu trữ như thế này, tôi không biết cách duy trì cấu trúc giống như mã Objc. Các thuộc tính được lưu trữ thực sự quan trọng đối với ứng dụng của tôi và tôi tin rằng Apple phải tạo ra một số giải pháp để thực hiện điều đó trong Swift.
Như đã nói bởi jou, những gì tôi đang tìm kiếm thực sự là sử dụng các đối tượng liên quan, vì vậy tôi đã làm (trong một bối cảnh khác):
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))
}
}
}
Nhưng tôi nhận được EXC_BAD_ACCESS khi thực hiện:
class UIBubble : UIView {
required init(coder aDecoder: NSCoder) {
...
self.layer.shapeLayer = CAShapeLayer()
...
}
}
Có ý kiến gì không?