Migration zu GMSPlaceField als NS_OPTIONS

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

Ab Version 4.0.0 des Places SDK for iOS wird für den GMSPlaceField-Typ das NS_OPTIONS-Makro verwendet. Versionen 3.x des SDKs haben GMSPlaceField als NS_ENUM und werden weiterhin unterstützt.

  • Wenn Sie Objective-C verwenden, hat das keine Auswirkungen. Du kannst GMSPlaceField wie zuvor verwenden.

  • Wenn Sie Swift verwenden: Ihre Implementierung funktioniert nicht mehr, wenn Sie die Syntax GMSPlaceField(rawValue:) als Konstruktor verwenden, die ältere Versionen des SDK als optionale GMSPlaceField? zurückgegeben haben. Version 4.0.0 und höher gibt einen nicht optionalen GMSPlaceField-Wert zurück. Alle Vorgänge, die an optionalen Elementen ausgeführt werden, z. B. bedingte Prüfungen oder das erzwungene Entpacken, schlagen fehl. Darüber hinaus kannst du jetzt Array-Syntax verwenden, um GMSPlaceField-Elemente zu kombinieren

Code migrieren

Bestimmte bedingte Auspackungen oder das Erzwingen des Entpackens sind in Swift nicht mehr möglich. In den folgenden Beispielen wird gezeigt, wie Sie diese Probleme beheben und mit der Array-Syntax GMSPlaceField deklarieren.

Bedingtes Auspacken

Die Anweisung im folgenden Beispiel zeigt, wie mit if ein GMSPlaceField-Array erstellt wird, für das ein bedingtes Entpacken erforderlich ist. Dies führt zu einem Compiler-Fehler ("Initializer für bedingte Bindung muss optional sein, nicht GMSPlaceField").

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

Entfernen Sie die if-Anweisung wie hier beschrieben, um das 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]

Aufheben des Wrappings erzwingen

Die Anweisung im folgenden Beispiel zeigt, wie GMSPlaceField als nicht optionaler Typ verwendet wird. Dies führt zu einem Compiler-Fehler ("Das Wrapping von Werten des nicht optionalen Typs GMSPlaceField&&t kann nicht erzwungen werden):

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

Verwende GMSPlaceField als optionalen Typ, um das Problem zu beheben:

// 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]