Estou mudando um aplicativo do Objective-C para o Swift, que tenho algumas categorias com propriedades armazenadas, por exemplo:
@interface UIView (MyCategory)
- (void)alignToView:(UIView *)view
alignment:(UIViewRelativeAlignment)alignment;
- (UIView *)clone;
@property (strong) PFObject *xo;
@property (nonatomic) BOOL isAnimating;
@end
Como as extensões Swift não aceitam propriedades armazenadas como essas, não sei como manter a mesma estrutura que o código Objc. As propriedades armazenadas são realmente importantes para o meu aplicativo e acredito que a Apple deve ter criado alguma solução para fazê-lo no Swift.
Como dito por jou, o que eu estava procurando era realmente usar objetos associados, então usei (em outro contexto):
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))
}
}
}
Mas eu recebo um EXC_BAD_ACCESS ao fazer:
class UIBubble : UIView {
required init(coder aDecoder: NSCoder) {
...
self.layer.shapeLayer = CAShapeLayer()
...
}
}
Alguma ideia?