Począwszy od wersji 4.0.0 pakietu Places SDK na iOS typ GMSPlaceField
używa teraz makra NS_OPTIONS
. Wersje 3.x pakietu SDK mają GMSPlaceField
jako NS_ENUM
i nadal są obsługiwane.
Jeśli używasz języka Objective-C: nie ma żadnych konsekwencji. Możesz nadal korzystać z
GMSPlaceField
tak jak do tej pory.Jeśli używasz Swifta: implementacja się zepsuje, jeśli używasz składni
GMSPlaceField(rawValue:)
jako konstruktora, który w starszych wersjach pakietu SDK zwraca opcjonalny elementGMSPlaceField?
. Wersja 4.0.0 i nowsze zwracają nieopcjonalną wartośćGMSPlaceField
; wszelkie operacje wykonywane na opcjonalnych wartościach, takie jak sprawdzanie warunków czy wymuszanie rozpakowania, nie powiedzie się. Dodatkowo możesz teraz używać składni tablic do łączenia wartościGMSPlaceField
Migracja kodu
Niektóre warunkowe lub wymuszone rozpakowania składni nie będą działać w Swift.
Przykłady poniżej pokazują, jak rozwiązać te problemy, a także jak za pomocą składni tablicowej zadeklarować zmienną GMSPlaceField
:
Wyodrębnianie warunkowe
Wyrażenie w tym przykładzie pokazuje użycie funkcji if
do utworzenia tablicy GMSPlaceField
, która wymaga warunkuwnego rozpakowania. Spowoduje to błąd kompilatora („Inicjalizator dla warunkowego wiązania musi mieć typ Optional, a nie GMSPlaceField
”).
// Before.
if let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
) { // Do something }
Aby rozwiązać ten problem, usuń instrukcję if
, jak pokazano poniżej:
// After.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)
// Do something
Możesz też użyć składni tablicy:
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]
Wymuszanie rozpakowywania
W tym przykładzie użyto instrukcji GMSPlaceField
jako nieopcjonalnej instrukcji. Spowoduje to błąd kompilatora („Nie można wymusić rozpakowania wartości typu nieopcjonalnego GMSPlaceField”).
// Before.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)!
Aby rozwiązać ten problem, użyj typu opcjonalnego GMSPlaceField
, jak pokazano poniżej:
// After.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)
Możesz też użyć składni tablicy:
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]