Migracja z pakietu SDK Miejsc na iOS do pakietu SDK Miejsc Swift na iOS (wersja w podglądzie) powinna być prosta i można ją przeprowadzić stopniowo. Struktury w Swift SDK do obsługi Places na iOS (wersja podglądowa) nie są zgodne z odpowiednimi strukturami w języku Objective-C, dlatego zalecamy przeniesienie poszczególnych fragmentów funkcji na podstawie użycia interfejsów API w GMSPlacesClient.
Dodawanie do projektu pakietu SDK Miejsca Swift na iOS (wersja podglądowa)
Aby korzystać z pakietu SDK Miejsca Swift na iOS (wersja podglądowa), wykonaj te czynności:
- Włącz Places API (nowość).
Dodaj pakiet Places Swift SDK na iOS (wersja podglądowa) do swoich zależności. Możesz zainstalować
GooglePlaces
lubGooglePlacesSwift
.Zainicjuj klienta Places za pomocą funkcji
PlacesClient
.
Przykład migracji krok po kroku
Załóżmy na przykład, że aplikacja korzystająca z pakietu SDK Miejsc na iOS otrzymuje sugestie autouzupełniania na podstawie tekstu, a następnie pobiera szczegóły pierwszej propozycji miejsca. W przypadku pakietu SDK Miejsc na iOS istniejący kod może wyglądać tak:
// Initialize Places Client.
GMSPlacesClient.provideAPIKey(apiKey)
let client = GMSPlacesClient.shared()
// Fetch Autocomplete Request.
let center = CLLocation(latitude: 37.3913916, longitude: -122.0879074)
let northEast = CLLocationCoordinate2DMake(37.388162, -122.088137)
let southWest = CLLocationCoordinate2DMake(37.395804, -122.077023)
let filter = GMSAutocompleteFilter()
filter.types = [kGMSPlaceTypeRestaurant]
filter.origin = center
filter.locationBias = GMSPlaceRectangularLocationOption(northEast, southWest)
let request = GMSAutocompleteRequest(query: "Sicilian piz")
request.filter = filter
client.fetchAutocompleteSuggestions(from: request) { (results, error) in
guard let results, error == nil else {
print("Autocomplete error: \(String(describing: error))")
return
}
// Fetch Place Request.
guard let placeID = results.first?.placeSuggestion?.placeID else { return }
let myProperties = [GMSPlaceProperty.name, GMSPlaceProperty.website].map {$0.rawValue}
let fetchPlaceRequest = GMSFetchPlaceRequest(placeID: placeID, placeProperties: myProperties, sessionToken: nil)
client.fetchPlace(with: fetchPlaceRequest) { (place: GMSPlace?, error: Error?) in
guard let place, error == nil else { return }
print("Place found: \(String(describing: place.name)); \(String(describing: place.website))")
}
}
Aktualizacja miejsca początkowego klienta
Aby zmodernizować kod i korzystać z możliwości nowego pakietu SDK, musisz zastąpić GMSPlacesClient obiektem PlacesClient. Dodatkowo w nowej metodzie zmieniły się nazwy parametrów, więc musisz zmienić parametr na from
zamiast with
. Na koniec warto wspomnieć, że pakiet SDK Miejsca Swift na iOS (wersja podglądowa) korzysta z uaktualnionego AutocompleteRequest.
Zaktualizowany kod
// Initialize Places Swift Client.
let _ = PlacesClient.provideAPIKey(apiKey)
let placesSwiftClient = PlacesClient.shared
Kod oryginalny
// Initialize Places Client.
GMSPlacesClient.provideAPIKey(apiKey)
let client = GMSPlacesClient.shared()
Zmień prośbę o autouzupełnianie
Możesz zacząć od zaktualizowania procesu żądania autouzupełniania. Stary kod używa wywołania zwrotnego do zapytania o sugestie autouzupełniania, a nowy kod używa wzorca switch
/await
. Funkcja wywołania zwrotnego może zwiększać złożoność struktury kodu i obsługi błędów. Nowy pakiet SDK Miejsca Swift na iOS (w wersji wstępnym) obsługuje równoległość, co upraszcza operacje asynchroniczne.
// Initialize Places Swift Client.
let _ = PlacesClient.provideAPIKey(apiKey)
let placesSwiftClient = PlacesClient.shared
// Fetch Autocomplete Request.
let center = CLLocation(latitude: 37.3913916, longitude: -122.0879074)
let northEast = CLLocationCoordinate2DMake(37.388162, -122.088137)
let southWest = CLLocationCoordinate2DMake(37.395804, -122.077023)
let bias = RectangularCoordinateRegion(northEast: northEast, southWest: southWest)
let filter = AutocompleteFilter(types: [ .restaurant ], origin: center, coordinateRegionBias: bias)
let autocompleteRequest = AutocompleteRequest(query: "Sicilian piz", filter: filter)
let placeID: String
switch await placesSwiftClient.fetchAutocompleteSuggestions(with: autocompleteRequest) {
case .success(let results):
switch results.first {
case .place(let placeSuggestion):
placeID = placeSuggestion.placeID
case .none:
fallthrough
@unknown default:
return
}
case .failure(let placesError):
print("Autocomplete error: \(placesError)")
return
}
// Initialize Places Client.
GMSPlacesClient.provideAPIKey(apiKey)
let placesClient = GMSPlacesClient.shared()
// Fetch Place Request.
let myProperties = [GMSPlaceProperty.name, GMSPlaceProperty.website].map {$0.rawValue}
let fetchPlaceRequest = GMSFetchPlaceRequest(placeID: placeID, placeProperties: myProperties, sessionToken: nil)
placesClient.fetchPlace(with: fetchPlaceRequest) { (place: GMSPlace?, error: Error?) in
guard let place, error == nil else { return }
print("Place found: \(String(describing: place.name)); \(String(describing: place.website))")
}
Zmiana nazw metod i klas
Na koniec dokończ migrację, przeprowadzając refaktoryzację kodu fetchPlace
i usuwając deklarację GMSPlacesClient
oraz inicjalizację GMSPlaceProperty
. W pakiecie SDK Miejsca Swift na iOS (wersja podglądowa) nazwy metod i klas zostały zmienione w celu usunięcia prefiksu „GMS” i muszą zostać odpowiednio zaktualizowane. GMSFetchPlaceRequest
zmienia się w FetchPlaceRequest
.
Obsługa typów
Nowa metoda fetchPlace
korzysta z ulepszonego obsługiwania typów. Podczas gdy stary kod wymagał przekazywania wartości surowych właściwości, nowy kod nie wymaga od programistów jawnego pobierania wartości surowych, co zwiększa zwięzłość i czytelność kodu.
Równoczesność
Nowa metoda obsługuje też równoczesność, co umożliwia zastąpienie funkcji wywołania zwrotnego w funkcji placesClient.fetchPlace
wzorcem switch
/await
w funkcji placesSwiftClient.fetchPlace
.
// Initialize Places Swift Client.
let _ = PlacesClient.provideAPIKey(apiKey)
let placesSwiftClient = PlacesClient.shared
// Fetch Autocomplete Request.
let center = CLLocation(latitude: 37.3913916, longitude: -122.0879074)
let northEast = CLLocationCoordinate2DMake(37.388162, -122.088137)
let southWest = CLLocationCoordinate2DMake(37.395804, -122.077023)
let bias = RectangularCoordinateRegion(northEast: northEast, southWest: southWest)
let filter = AutocompleteFilter(types: [ .restaurant ], origin: center, coordinateRegionBias: bias)
let autocompleteRequest = AutocompleteRequest(query: "Sicilian piz", filter: filter)
let placeID: String
switch await placesSwiftClient.fetchAutocompleteSuggestions(with: autocompleteRequest) {
case .success(let results):
switch results.first {
case .place(let placeSuggestion):
placeID = placeSuggestion.placeID
case .none:
fallthrough
@unknown default:
return
}
case .failure(let placesError):
print("Autocomplete error: \(placesError)")
return
}
// Fetch Place Request.
let fetchPlaceRequest = FetchPlaceRequest(placeID: placeID, placeProperties: [.displayName, .websiteURL])
switch await placesSwiftClient.fetchPlace(with: fetchPlaceRequest) {
case .success(let place):
print("Place found: \(place.displayName): \(String(describing: place.description))")
case .failure(let placesError):
print("Place not found: \(placeID); \(placesError)")
}
Bycie na bieżąco
Aby dowiedzieć się więcej o nowych funkcjach i zmianach, odwiedź stronę z informacjami o wersji Places Swift SDK na iOS (wersja podglądowa).