Migrazione da Places SDK per iOS a L'SDK Places Swift per iOS (anteprima) deve essere semplice e facile da usare in modo incrementale. Poiché gli struct nell'SDK Places Swift per iOS (anteprima), non sono compatibili con le controparti basate su Objective-C, ti consigliamo di eseguire blocchi discreti di funzionalità basati sull'utilizzo delle API in GMSPlacesClient.
Aggiungi l'SDK Places Swift per iOS (anteprima) al tuo progetto
Per utilizzare l'SDK Places Swift per iOS (anteprima), sono necessari i seguenti passaggi:
- Abilita l'API Places (Nuova).
- Aggiungi Places Swift SDK per iOS (anteprima) alle tue dipendenze.
- Inizializza il client Places con
PlacesClient
.
Esempio di migrazione passo passo
Ad esempio, supponiamo che un'app che utilizza Places SDK for iOS riceve suggerimenti di completamento automatico in base a un input di testo, quindi recupera dettagli del suggerimento per il primo luogo. Utilizzo SDK Places per iOS, il codice esistente potrebbe avere un aspetto ad esempio:
// 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))")
}
}
Aggiorna l'inizializzazione del client Places
Per modernizzare il codice e sfruttare le funzionalità del nuovo SDK,
devi sostituire GMSPlacesClient con PlacesClient. Inoltre,
i nomi dei parametri vengono modificati nel nuovo metodo, pertanto devi aggiornare
su from
anziché su with
. Infine,
L'SDK Places Swift per iOS (anteprima) utilizza l'upgrade eseguito
AutocompleteRequest.
Codice aggiornato
// Initialize Places Swift Client.
let _ = PlacesClient.provideAPIKey(apiKey)
let placesSwiftClient = PlacesClient.shared
Codice originale
// Initialize Places Client.
GMSPlacesClient.provideAPIKey(apiKey)
let client = GMSPlacesClient.shared()
Aggiorna la richiesta di completamento automatico
Per iniziare, puoi aggiornare il flusso di richiesta di completamento automatico. Il vecchio codice utilizza un
per richiedere suggerimenti di completamento automatico, mentre il nuovo codice impiega un
Sequenza switch
/await
. I callback possono aggiungere complessità alla struttura del codice e
e la gestione degli errori. Il nuovo SDK Places Swift per iOS (anteprima) supporta la contemporaneità,
che semplifica le operazioni asincrone.
// 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))")
}
Aggiorna i nomi di metodi e classi
Infine, completa la migrazione eseguendo il refactoring del codice fetchPlace
e
rimuovendo sia l'inizializzazione di GMSPlacesClient
sia GMSPlaceProperty
dichiarazione. Nell'SDK Places Swift per iOS (anteprima), il metodo e i nomi delle classi
sono stati aggiornati in modo da rimuovere e deve essere aggiornato di conseguenza;
ad es. GMSFetchPlaceRequest
diventa FetchPlaceRequest
.
Gestione dei tipi
Il nuovo metodo fetchPlace
utilizza una gestione dei tipi migliorata. Mentre il vecchio codice
necessario trasmettere i valori non elaborati della proprietà, il nuovo codice non richiede
agli sviluppatori di recuperare esplicitamente valori non elaborati, migliorando così la
la leggibilità.
Contemporaneità
Inoltre, il nuovo metodo supporta la contemporaneità, consentendo di sostituire il valore
callback in placesClient.fetchPlace
con un pattern switch
/await
in
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)")
}