In Objective-C, è possibile utilizzare nil
per segnalare l'assenza di valore, ma solo per i tipi di oggetto. Swift generalizza questo (e lo rende sicuro dal testo) con il tipo generico Optional
: puoi avere un Optional<NSObject>
, a.k.a. NSObject?
, ma puoi anche avere un Int?
o un CLLocationCoordinate2D?
.
Ma CLLocationCoordinate2D
è una struct - se lo si utilizza in Objective-C, non è possibile assegnare nil
ad una variabile di tipo CLLocationCoordinate2D
. Questo è il motivo per cui ottieni questo errore.
Per quanto riguarda un workaround (brutto), si potrebbe avvolgere CLLocationCoordinate2D
in un oggetto:
class CLLocationCoordinate2DObj: NSObject {
let val: CLLocationCoordinate2D
init(_ val: CLLocationCoordinate2D) {
self.val = val
}
}
class Waypoint: NSObject {
dynamic var coordinate: CLLocationCoordinate2DObj?
}
Purtroppo, non è possibile trovare una soluzione più generale, con una classe wrapper oggetto generico per le strutture, come Objective- C non ha generici ... Un'alternativa sarebbe usare NSValue
come tipo di oggetto come described here, ma dubito che sarebbe più elegante.
fonte
2015-03-13 08:59:53
Non sono sicuro di cosa stai provando a fare. Probabilmente vuoi un osservatore su quella proprietà? Per quale scopo (solo per sapere quando la proprietà è cambiata)? Forse potrei suggerirti un'alternativa. – lchamp
@lchamp correct, voglio un osservatore per l'integrazione con ReactiveCocoa – bloudermilk