Ab Version 4.0.0 des Places SDK for iOS wird für den Typ GMSPlaceField
das NS_OPTIONS
-Makro verwendet. Version 3.x des SDK hat GMSPlaceField
als NS_ENUM
und wird weiterhin unterstützt.
Wenn Sie Objective-C verwenden:Es gibt keine Auswirkungen. Sie können
GMSPlaceField
weiterhin wie gewohnt verwenden.Wenn Sie Swift verwenden:Ihre Implementierung funktioniert nicht mehr, wenn Sie die
GMSPlaceField(rawValue:)
-Syntax als Konstruktor verwenden. In älteren Versionen des SDK wurde sie als optionalesGMSPlaceField?
zurückgegeben. In Version 4.0.0 und höher wird ein nicht optionalerGMSPlaceField
-Wert zurückgegeben. Alle Vorgänge, die für den optionalen Wert ausgeführt werden, z. B. bedingte Prüfungen oder Force Unwraps, schlagen fehl. Außerdem können Sie jetzt die Array-Syntax verwenden, umGMSPlaceField
s zu kombinieren.
Code migrieren
Bestimmte Syntaxen für das bedingte oder erzwungene Entpacken funktionieren in Swift nicht mehr.
Die folgenden Beispiele zeigen, wie Sie diese Probleme beheben können. Außerdem wird die Verwendung der Array-Syntax zum Deklarieren von GMSPlaceField
veranschaulicht:
Bedingtes Entpacken
Die Anweisung im folgenden Beispiel zeigt die Verwendung von if
zum Erstellen eines GMSPlaceField
-Arrays, für das ein bedingtes Entpacken erforderlich ist. Dies führt zu einem Compilerfehler („Initializer for conditional binding must have Optional type, not GMSPlaceField
“).
// Before.
if let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
) { // Do something }
Entfernen Sie die if
-Anweisung, um dieses Problem zu beheben:
// After.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)
// Do something
Sie können auch die Array-Syntax verwenden, wie hier gezeigt:
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]
Erzwungenes Entpacken
Die Anweisung im folgenden Beispiel zeigt die Verwendung von GMSPlaceField
als nicht optionalen Typ. Dies führt zu einem Compilerfehler („Cannot force unwrap value of non-optional type GMSPlaceField.“):
// Before.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)!
Verwenden Sie zur Behebung dieses Problems GMSPlaceField
als optionalen Typ, wie hier gezeigt:
// After.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)
Sie können auch die Array-Syntax verwenden, wie hier gezeigt:
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]