Migracja do GMSPlaceField jako NS_OPTIONS

Od wersji 4.0.0 pakietu SDK Miejsc na iOS typ GMSPlaceField korzysta teraz z makra NS_OPTIONS. Pakiet SDK w wersjach 3.x ma GMSPlaceField o wartości NS_ENUM i nadal są one obsługiwane.

  • Jeśli używasz trybu Objective-C: nie ma żadnych konsekwencji. Możesz nadal korzystać z usługi GMSPlaceField tak jak dotychczas.

  • 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 jako opcjonalne GMSPlaceField?. Wersja 4.0.0 i nowsze zwracają nieopcjonalną wartość GMSPlaceField. Wszystkie operacje wykonywane w ramach opcjonalnej, takie jak kontrole warunkowe lub wymuszanie wyodrębniania, zakończą się niepowodzeniem. Dodatkowo możesz teraz używać składni tablicy do łączenia funkcji GMSPlaceField

Migracja kodu

Niektóre składniowe wyodrębnianie warunkowe lub wymuszanie wyodrębniania składni przestaną działać w pliku Swift. Z przykładów poniżej dowiesz się, jak rozwiązać te problemy, a także za pomocą składni tablicy do zadeklarowania atrybutu GMSPlaceField:

Wyodrębnianie warunkowe

Instrukcja w poniższym przykładzie pokazuje użycie narzędzia if do utworzenia tablicy GMSPlaceField, która wymaga warunkowego wyodrębniania. Spowoduje to błąd kompilatora („inicjator do 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, jak pokazano tutaj:

// After.
let field =  GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)
// Do something

Możesz też użyć składni tablicy, tak 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 wystąpienie błędu kompilatora („Nie można wymusić wyodrębnienia wartości typu GMSPlaceField.”):

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

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

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

Możesz też użyć składni tablicy, tak jak pokazano poniżej:

let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]