Migration zu GMSPlaceField als NS_OPTIONS

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 optionale GMSPlaceField? zurückgegeben wurde. Ab Version 4.0.0 wird ein nicht optionaler GMSPlaceField-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, um GMSPlaceFields

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]