Począwszy od wersji 4.0.0 pakietu SDK Miejsc na iOS, typ GMSPlaceField używa teraz makra NS_OPTIONS. Wersje pakietu SDK 3.x mają znak GMSPlaceField
jako NS_ENUM i są nadal obsługiwane.
Jeśli używasz Objective-C: nie ma to żadnych konsekwencji. Możesz nadal korzystać z
GMSPlaceFieldjak dotychczas.Jeśli używasz języka Swift: Twoja implementacja przestanie działać, jeśli używasz składni
GMSPlaceField(rawValue:)jako konstruktora, który starsze wersje pakietu SDK zwracały jako opcjonalny typGMSPlaceField?. Wersja 4.0.0 i nowsze zwracają wartośćGMSPlaceField, która nie jest opcjonalna. Wszelkie operacje wykonywane na wartości opcjonalnej, takie jak sprawdzanie warunków lub wymuszone rozpakowywanie, zakończą się niepowodzeniem. Dodatkowo możesz teraz używać składni tablicy, aby łączyćGMSPlaceFields.
Migracja kodu
Niektóre składnie warunkowego lub wymuszonego wyodrębniania nie będą działać w języku Swift.
Poniższe przykłady pokazują, jak rozwiązać te problemy, a także jak używać składni tablicy do deklarowania GMSPlaceField:
Wyodrębnianie warunkowe
Instrukcja w przykładzie poniżej pokazuje, jak za pomocą znaku if utworzyć tablicę GMSPlaceField, która wymaga warunkowego rozpakowania. Spowoduje to błąd kompilatora („Inicjator wiązania warunkowego 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, jak pokazano tutaj:
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]
Wymuszone wyodrębnianie
Instrukcja w przykładzie poniżej pokazuje użycie GMSPlaceField jako typu nieopcjonalnego. Spowoduje to błąd kompilatora („Cannot force unwrap value
of non-optional type GMSPlaceField.”):
// Before.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)!
Aby rozwiązać ten problem, użyj GMSPlaceField jako typu 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 tutaj:
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]