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 optionaleGMSPlaceField?
zurückgegeben. Ab Version 4.0.0 gibt ein nicht optionalerGMSPlaceField
-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, umGMSPlaceField
-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]