In Objective-C können Sie nil
verwenden, um die Abwesenheit von Wert zu signalisieren, aber nur für Objekttypen. Swift verallgemeinert dies (und macht es typsicher) mit dem generischen Typ Optional
: Sie können eine Optional<NSObject>
, eine kA NSObject?
haben, aber Sie können auch eine Int?
oder eine CLLocationCoordinate2D?
haben.
Aber CLLocationCoordinate2D
ist eine Struktur - wenn Sie es in Objective-C verwenden, können Sie nicht nil
auf eine Variable vom Typ CLLocationCoordinate2D
zuweisen können. Deshalb erhalten Sie diesen Fehler.
Wie für eine (hässlich) Abhilfe könnte man CLLocationCoordinate2D
in einem Objekt wickeln:
class CLLocationCoordinate2DObj: NSObject {
let val: CLLocationCoordinate2D
init(_ val: CLLocationCoordinate2D) {
self.val = val
}
}
class Waypoint: NSObject {
dynamic var coordinate: CLLocationCoordinate2DObj?
}
Leider kann man nicht eine allgemeinere Lösung mit einer generischen Objekt-Wrapper-Klasse für structs finden, als objektiv- C hat keine Generika ... Eine Alternative wäre, NSValue
als Objekttyp wie described here zu verwenden, aber ich bezweifle, dass es eleganter wäre.
Ich bin mir nicht sicher, was Sie versuchen zu tun. Sie möchten wahrscheinlich einen Beobachter auf dieser Eigenschaft? Zu welchem Zweck (nur um zu wissen, wann sich das Eigentum geändert hat)? _Vielleicht kann ich Ihnen eine Alternative vorschlagen._ – lchamp
@lchamp korrekt, ich möchte einen Beobachter für die Integration mit ReactiveCocoa – bloudermilk