Migracja do GMSPlaceField jako NS_OPTIONS

Począwszy od wersji 4.0.0 pakietu Places SDK dla iOS, typ GMSPlaceField korzysta teraz z makra NS_OPTIONS. Wersje 3.x pakietu SDK mają GMSPlaceField w wersji NS_ENUM i są nadal obsługiwane.

  • Jeśli używasz kodu Objective-C: nie wiąże się to z żadnymi konsekwencjami. Możesz nadal korzystać z usługi GMSPlaceField tak jak wcześniej.

  • Jeśli używasz kodu Swift: implementacja nie działa, jeśli jako konstruktora używasz składni GMSPlaceField(rawValue:), którą starsze wersje pakietu SDK zwracały opcjonalny GMSPlaceField?. Wersja 4.0.0 i nowsze zwracają nieopcjonalną wartość GMSPlaceField. Wszystkie operacje wykonywane na elementach opcjonalnych, takie jak testy warunkowe czy wymuszanie wyodrębnienia, zakończą się niepowodzeniem. Dodatkowo możesz teraz używać składni tablicy do łączenia funkcji GMSPlaceField

Migracja kodu

Niektóre składni wyodrębniania warunkowego lub wymuszania wyodrębniania przestaną działać w kodzie Swift. Poniższe przykłady pokazują, jak rozwiązać te problemy, a także zademonstrują użycie składni tablicy do zadeklarowania atrybutu GMSPlaceField:

Wyodrębnianie warunkowe

Instrukcja w poniższym przykładzie pokazuje użycie funkcji if do utworzenia tablicy GMSPlaceField, która wymaga wyodrębnienia warunkowego. Spowoduje to błąd kompilatora („Inicjator na potrzeby wiązania warunkowego musi mieć typ opcjonalny, 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 w podany niżej sposób:

// 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ębnienie

Instrukcja w poniższym przykładzie pokazuje, że typ GMSPlaceField nie jest opcjonalny. Spowoduje to pojawienie się błędu kompilatora („Nie można wymusić wyodrębnienia wartości typu GMSPlaceField bez opcjonalnego użycia”):

// Before.
let field = GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)!

Aby rozwiązać ten problem, jako opcjonalny typ użyj GMSPlaceField, jak pokazano poniżej:

// 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]