Migration zu GMSPlaceField als NS_OPTIONS

Ab Version 4.0.0 des Places SDK for iOS wird für den Typ GMSPlaceField jetzt das Makro NS_OPTIONS verwendet. Versionen 3.x des SDKs haben GMSPlaceField als NS_ENUM und werden 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, wenn Sie die Syntax GMSPlaceField(rawValue:) als Konstruktor verwenden. Ältere Versionen des SDKs haben als optionales GMSPlaceField? zurückgegeben. Version 4.0.0 und höher gibt einen nicht optionalen Wert für GMSPlaceField zurück. Alle Vorgänge, die für die optionale Ausführung ausgeführt werden, z. B. bedingte Prüfungen oder erzwungene Entpackungen, schlagen fehl. Darüber hinaus können Sie jetzt mithilfe der Array-Syntax GMSPlaceField-Objekte kombinieren.

Code migrieren

Bestimmte Syntaxen für bedingtes bedingtes oder erzwungenes Entpacken funktionieren in Swift nicht mehr. Die folgenden Beispiele zeigen, wie Sie diese Probleme beheben können. Außerdem wird veranschaulicht, wie GMSPlaceField mit der Array-Syntax deklariert wird:

Bedingtes Entpacken

Die Anweisung im folgenden Beispiel zeigt, wie Sie mit if ein GMSPlaceField-Array erstellen, für das ein bedingtes Entpacken erforderlich ist. Dies führt zu einem Compiler-Fehler („Der Initialisierer für bedingte Bindung muss den Typ optional haben, nicht den Typ GMSPlaceField).

// Before.
if let field = GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
) { // Do something }

Um dieses Problem zu beheben, entfernen Sie die Anweisung if wie hier gezeigt:

// After.
let field =  GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)
// Do something

Sie können auch wie hier gezeigt die Array-Syntax verwenden:

let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]

Entpacken erzwingen

Die Anweisung im folgenden Beispiel zeigt, wie GMSPlaceField als nicht optionaler Typ verwendet wird. Dies führt zu einem Compiler-Fehler („Unwrap-Wert des nicht optionalen Typs „GMSPlaceField“ kann nicht erzwungen werden.“):

// Before.
let field = GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)!

Um dieses Problem zu beheben, verwenden Sie GMSPlaceField als optionalen Typ, wie hier gezeigt:

// After.
let field =  GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)

Sie können auch wie hier gezeigt die Array-Syntax verwenden:

let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]