Migracja do GMSPlaceField jako NS_OPTIONS

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ć elementy GMSPlaceField

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]