Począwszy od wersji 4.0.0 pakietu SDK Places na iOS, pakiet GMSPlaceField
typ używa teraz makra NS_OPTIONS
. Wersje 3.x pakietu SDK zawierają GMSPlaceField
jako NS_ENUM
i nadal są obsługiwane.
Jeśli używasz Objective-C: nie ma to żadnych skutków. Możesz kontynuować używając funkcji
GMSPlaceField
tak jak wcześniej.Jeśli używasz Swift: implementacja przestanie działać, jeśli używasz składni
GMSPlaceField(rawValue:)
jako konstruktora, która w starszych wersjach pakietu SDK zwróconego jako opcjonalna wartośćGMSPlaceField?
. Wersja 4.0.0 lub nowsza zwraca nieopcjonalną wartośćGMSPlaceField
; wszystkie operacje, które są które są wykonywane na elementach opcjonalnych, takich jak testy warunkowe lub wymuszanie wyodrębniania, niepowodzenie. Dodatkowo możesz teraz używać składni tablicy, aby łączyć elementyGMSPlaceField
Migracja kodu
Niektóre składnia wyodrębniania warunkowego lub wymuszania nie działają w kodzie Swift.
Poniższe przykłady pokazują, jak rozwiązać te problemy, a także pokazują, jak korzystać
składni tablicy do zadeklarowania GMSPlaceField
:
Wyodrębnianie warunkowe
Instrukcja w poniższym przykładzie pokazuje użycie if
do utworzenia
Tablica GMSPlaceField
, która wymaga wyodrębniania warunkowego. Dzięki temu
w błędzie kompilatora („Inicjator wiązania warunkowego musi mieć parametr Opcjonalny”
typ, 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 tutaj:
// After.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)
// Do something
Możesz też użyć składni tablicy, jak pokazano poniżej:
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]
Wymuś wyodrębnianie
Instrukcja w poniższym przykładzie pokazuje użycie parametru GMSPlaceField
jako nie-
opcjonalny. Spowoduje to błąd kompilatora („Nie można wymusić wyodrębnienia wartości”
nieopcjonalnego typu GMSPlaceField."):
// Before.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)!
Aby rozwiązać ten problem, użyj typu GMSPlaceField
jako opcjonalnego, jak pokazano tutaj:
// After.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)
Możesz też użyć składni tablicy, jak pokazano poniżej:
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]