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 optionalesGMSPlaceField?
zurückgegeben haben. Version 4.0.0 und höher gibt einen nicht optionalenGMSPlaceField
-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-SyntaxGMSPlaceField
s 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]