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 jetzt 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:Dies hat keine Auswirkungen. Sie können GMSPlaceField weiterhin wie zuvor verwenden.

  • Wenn Sie Swift verwenden:Ihre Implementierung funktioniert nicht mehr, wenn Sie die Syntax GMSPlaceField(rawValue:) als Konstruktor verwenden, der ältere Versionen des SDK als optionales 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 erzwungene Wrappings, schlagen fehl. Außerdem kannst du jetzt mit der Array-Syntax GMSPlaceFields kombinieren

Code migrieren

Bestimmte bedingte Entpackungs- oder Entpackungssyntaxen funktionieren in Swift nicht mehr. Die folgenden Beispiele zeigen, wie diese Probleme behoben und die Verwendung der Arraysyntax zum Deklarieren von GMSPlaceField veranschaulicht werden:

Bedingtes Entpacken

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

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

Entfernen Sie die Anweisung if, 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]

Entpacken erzwingen

Die Anweisung im folgenden Beispiel zeigt, wie GMSPlaceField als nicht optionaler Typ verwendet wird. Dies führt zu einem Compiler-Fehler („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 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]