Subclassando MKCircle en Swift

Me gustaría subclass MKCircle (por ejemplo, MyCircle ) agregando otra propiedad String, llamémosle " code ". Esta propiedad no debe ser opcional y constante, así que tengo que configurarlo desde un inicializador, ¿verdad? Por supuesto, MyCircle también debe get la coorderada central y el radio. Estas dos properties son de solo lectura, así que también necesito configurarlas mediante inicializador.

Al final necesito un inicializador que tome 3 parameters: coordinate , radius y code . Suena bastante fácil, pero los designadores de Swifts y los inventores de conveniencia y sus reglas me están costando mucho trabajo aquí.

El problema es la definición de MKCircle :

 class MKCircle : MKShape, MKOverlay, MKAnnotation, NSObjectProtocol { convenience init(centerCoordinate coord: CLLocationCoordinate2D, radius: CLLocationDistance) convenience init(mapRect: MKMapRect) // radius will be determined from MAX(width, height) var coordinate: CLLocationCoordinate2D { get } var radius: CLLocationDistance { get } var boundingMapRect: MKMapRect { get } } 

Como puede ver, el inicializador de MKCircle que toma coordinate y radius es un initalizador de conveniencia y, por lo tanto, no se puede llamar desde los inicializadores de mi subclass. Además, las properties son de solo lectura, así que no puedo establecerlas desde los inicializadores de mi subclass o desde el exterior.

He intentado muchas variaciones pero parece que la única forma de trabajo es hacer que mi propiedad de code opcional, use el inicializador de conveniencia henetworkingado para establecer la coorderada y el radio y luego establezca la propiedad del código, así:

 class MyCircle: MKCircle { var code: String? } overlay = MyCircle(centerCoordinate: coord, radius: radius) overlay.code = code 

¿Me he perdido algo? ¿Hay alguna manera de definir un único inicializador de conveniencia que tome 3 arguments en este caso?

¡Muchas gracias de antemano! 🙂

No mucho mejor que tu solución, solo un envoltorio a su alnetworkingedor:

 class MyCircle: MKCircle { var code: String! class func circleAtCenterCoordinate(coord: CLLocationCoordinate2D, radius: CLLocationDistance, code: String)->MyCircle { let circ=MyCircle(centerCoordinate: coord, radius: radius) circ.code=code return circ } } 

y utilícelo así:

 let circ=MyCircle.circleAtCenterCoordinate(CLLocationCoordinate2D, radius: CLLocationDistance, code: String) 

Esto puede ser una de las cosas molestas de las classs subclasificadoras de la Fundación.