Ab Version 4.0.0 des Places SDK for iOS wird für den GMSPlaceField
-Typ jetzt das NS_OPTIONS
-Makro verwendet. Versionen 3.x des SDK haben GMSPlaceField
als NS_ENUM
und werden weiterhin unterstützt.
Wenn Sie Objective-C verwenden, hat dies keine Auswirkungen. Sie können
GMSPlaceField
wie gewohnt verwenden.Wenn Sie Swift verwenden:Ihre Implementierung funktioniert nicht, wenn Sie die
GMSPlaceField(rawValue:)
-Syntax als Konstruktor verwenden, die in älteren SDK-Versionen als optionaleGMSPlaceField?
zurückgegeben wurde. Ab Version 4.0.0 wird ein nicht optionalerGMSPlaceField
-Wert zurückgegeben. Alle Vorgänge, die auf dem optionalen Wert ausgeführt werden, z. B. bedingte Prüfungen oder erzwungene Entschachtelungen, schlagen fehl. Außerdem können Sie jetzt die Arraysyntax verwenden, umGMSPlaceField
s
Code migrieren
Bestimmte Syntaxen für das bedingte Entfernen des Umschlags oder das Erzwingen des Entfernens des Umschlags funktionieren in Swift nicht.
In den folgenden Beispielen wird gezeigt, wie Sie diese Probleme beheben und GMSPlaceField
mithilfe der Arraysyntax deklarieren:
Bedingtes Entfernen der Verschachtelung
In der Anweisung im folgenden Beispiel wird gezeigt, wie mit if
ein GMSPlaceField
-Array erstellt wird, das bedingt entpackt werden muss. Dies führt zu einem Compilerfehler („Der Initialisierer für die bedingte Bindung muss den Typ ‚Optional‘ haben, nicht 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]
Entpacken erzwingen
In der Anweisung im folgenden Beispiel wird GMSPlaceField
als nicht optionaler Typ verwendet. 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 GMSPlaceField
als optionalen Typ, um dieses Problem zu beheben, 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]