Estoy cambiando una aplicación de Objective-C a Swift, que tengo un par de categorías con propiedades almacenadas, por ejemplo:
@interface UIView (MyCategory)
- (void)alignToView:(UIView *)view
alignment:(UIViewRelativeAlignment)alignment;
- (UIView *)clone;
@property (strong) PFObject *xo;
@property (nonatomic) BOOL isAnimating;
@end
Como las extensiones Swift no aceptan propiedades almacenadas como estas, no sé cómo mantener la misma estructura que el código Objc. Las propiedades almacenadas son realmente importantes para mi aplicación y creo que Apple debe haber creado alguna solución para hacerlo en Swift.
Como dijo jou, lo que estaba buscando era usar objetos asociados, así que lo hice (en otro 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))
}
}
}
Pero obtengo un EXC_BAD_ACCESS cuando hago:
class UIBubble : UIView {
required init(coder aDecoder: NSCoder) {
...
self.layer.shapeLayer = CAShapeLayer()
...
}
}
¿Algunas ideas?