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 wie bisher verwenden.

  • Wenn Sie Swift verwenden:Ihre Implementierung funktioniert nicht, wenn Sie die Syntax GMSPlaceField(rawValue:) als Konstruktor verwenden. Ältere Versionen des SDK haben diese als optionale GMSPlaceField? zurückgegeben. Ab Version 4.0.0 gibt ein nicht optionaler GMSPlaceField-Wert zurück. Alle Vorgänge, die für die optionalen Prüfungen ausgeführt werden, z. B. bedingte Prüfungen oder erzwungene Unwrapp-Vorgänge, schlagen fehl. Darüber hinaus können Sie jetzt die Array-Syntax verwenden, um GMSPlaceField-Werte zu kombinieren.

Code migrieren

Bestimmte Syntaxen zum bedingten Entpacken oder Erzwingen des Entpackens funktionieren in Swift nicht mehr. Die folgenden Beispiele veranschaulichen, wie diese Probleme behoben werden können, und veranschaulichen auch die Verwendung der Array-Syntax zum Deklarieren von GMSPlaceField:

Bedingtes Entpacken

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 den Typ „Optional“ haben, nicht 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 die Arraysyntax verwenden, wie hier gezeigt:

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

Entpacken erzwingen

Die Anweisung im folgenden Beispiel zeigt, dass 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 die Arraysyntax verwenden, wie hier gezeigt:

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