Migration vom Places SDK for iOS zu Das Places Swift SDK for iOS (Vorabversion) sollte einfach sein und inkrementell. Da die Strukturen im Places Swift SDK for iOS (Vorabversion) nicht mit ihren Objective-C-basierten Pendants kompatibel sind, empfehlen wir, einzelne Funktionsbereiche zu migrieren, die auf der Verwendung von APIs in GMSPlacesClient basieren.
Places Swift SDK for iOS (Vorabversion) zum Projekt hinzufügen
Die folgenden Schritte sind erforderlich, um das Places Swift SDK for iOS (Vorabversion) zu verwenden:
- Aktivieren Sie die Places API (New).
- Fügen Sie den Places Swift SDK for iOS (Vorabversion) zu Ihren Abhängigkeiten.
- Initialisieren Sie den Places-Client mit
PlacesClient
Beispiel für eine Schritt-für-Schritt-Migration
Beispiel: In einer App wird das Places SDK for iOS verwendet. erhält auf Grundlage der Texteingabe automatisch vervollständigte Vorschläge und ruft dann die Details zum Vorschlag für den ersten Ort. Mit Places SDK for iOS verwenden, sieht der vorhandene Code möglicherweise wie zum Beispiel so:
// 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))")
}
}
Places Client-Initialisierer aktualisieren
Um den Code zu modernisieren und die Funktionen des neuen SDK zu nutzen,
GMSPlacesClient muss durch PlacesClient ersetzt werden. Darüber hinaus enthält der
in der neuen Methode geändert werden, müssen Sie das
auf from
statt auf with
. Die Funktion
Places Swift SDK for iOS (Vorabversion) verwendet das aktualisierte
AutocompleteRequest.
Aktualisierter Code
// Initialize Places Swift Client.
let _ = PlacesClient.provideAPIKey(apiKey)
let placesSwiftClient = PlacesClient.shared
Ursprünglicher Code
// Initialize Places Client.
GMSPlacesClient.provideAPIKey(apiKey)
let client = GMSPlacesClient.shared()
Autocomplete-Anfrage aktualisieren
Aktualisieren Sie dazu zuerst den Ablauf für die Anfrage zur automatischen Vervollständigung. Der alte Code verwendet eine
-Rückruf zurück, um Vorschläge für die automatische Vervollständigung anzufordern. Im neuen Code wird hingegen
switch
/await
-Muster. Callbacks können die Codestruktur und die Fehlerbehandlung verkomplizieren. Das neue Places Swift SDK for iOS (Vorabversion) unterstützt die Parallelität, was asynchrone Vorgänge vereinfacht.
// 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))")
}
Methoden- und Klassennamen aktualisieren
Schließen Sie die Migration ab, indem Sie den fetchPlace
-Code refaktorieren und
Entfernen der Initialisierung GMSPlacesClient
und GMSPlaceProperty
Erklärung. Im Places Swift SDK for iOS (Vorabversion) werden die Methoden und Klassennamen
„GMS“ wurde entfernt, und muss entsprechend aktualisiert werden.
z.B. GMSFetchPlaceRequest
wird zu FetchPlaceRequest
.
Typbehandlung
Die neue Methode fetchPlace
verwendet eine verbesserte Typverarbeitung. Der alte Code
die Rohwerte der Eigenschaft übergeben müssen, erfordert der neue Code keine
die Entwickelnden hier explizit Rohwerte abrufen, um so die Zusammenfassung und
Lesbarkeit.
Gleichzeitigkeit
Außerdem unterstützt die neue Methode Nebenläufigkeit, sodass die
Callback in placesClient.fetchPlace
mit einem switch
/await
-Muster 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)")
}