iOS için Yerler SDK'sından iOS için Yerler Swift SDK'sına (Önizleme) geçiş basittir ve kademeli olarak yapılabilir. iOS için Places Swift SDK'sındaki (Önizleme) yapı türleri, Objective-C tabanlı benzerleriyle uyumlu olmadığından, GMSPlacesClient'taki API'lerin kullanımına göre ayrı işlev parçalarını taşımanızı öneririz.
iOS için Yerler Swift SDK'sını (Önizleme) projenize ekleme
iOS için Yerler Swift SDK'sını (Önizleme) kullanmak üzere aşağıdaki adımlar gereklidir:
- Places API'yi (Yeni) etkinleştirin.
iOS için Yerler Swift SDK'sını (Önizleme) bağımlılıklarınıza ekleyin.
GooglePlaces
,GooglePlacesSwift
veya her ikisini de yüklemeyi seçebilirsiniz.Yerler istemcisini
PlacesClient
ile başlatın.
Adım adım açıklamalı taşıma örneği
Örneğin, iOS için Places SDK'sını kullanan bir uygulamanın, metin girişine göre otomatik tamamlama önerileri aldığını ve ardından ilk yer önerisinin ayrıntılarını getirdiğini varsayalım. iOS için Yerler SDK'sı kullanılarak yazılmış mevcut kod aşağıdaki gibi görünebilir:
// 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 istemci başlatıcısını güncelleme
Kodu modernize etmek ve yeni SDK'nın özelliklerinden yararlanmak için GMSPlacesClient'ı PlacesClient ile değiştirmeniz gerekir. Ayrıca, yeni yöntemde parametre adları değiştirildiğinden parametreyi with
yerine from
olarak güncellemeniz gerekir. Son olarak, iOS için Yerler Swift SDK'sı (Önizleme), yükseltilmiş AutocompleteRequest'i kullanır.
Güncellenen kod
// Initialize Places Swift Client.
let _ = PlacesClient.provideAPIKey(apiKey)
let placesSwiftClient = PlacesClient.shared
Orijinal kod
// Initialize Places Client.
GMSPlacesClient.provideAPIKey(apiKey)
let client = GMSPlacesClient.shared()
Otomatik tamamlama isteğini güncelleme
Otomatik tamamlama istek akışını güncelleyerek başlayabilirsiniz. Eski kod, otomatik tamamlama önerileri istemek için geri çağırma işlevi kullanırken yeni kod switch
/await
desenini kullanır. Geri çağırma işlevleri, kod yapısını ve hata işlemeyi karmaşık hale getirebilir. iOS için yeni Places Swift SDK'sı (Önizleme), eşzamanlılığı destekler. Bu sayede eşzamansız işlemler basitleştirilir.
// 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))")
}
Yöntem ve sınıf adlarını güncelleme
Son olarak, fetchPlace
kodunu yeniden düzenleyerek ve hem GMSPlacesClient
ilk kullanıma hazırlama hem de GMSPlaceProperty
beyanını kaldırarak taşıma işlemini tamamlayın. iOS için Places Swift SDK'sında (Önizleme), yöntem ve sınıf adları "GMS" ön ekinin kaldırılması için güncellendi ve buna göre güncellenmesi gerekiyor. Örneğin: GMSFetchPlaceRequest
, FetchPlaceRequest
olur.
Tür işleme
Yeni fetchPlace
yönteminde, tür işleme özelliği geliştirilmiştir. Eski kodda mülkün ham değerlerinin iletilmesi gerekirken yeni kodda geliştiricilerin burada ham değerleri açıkça getirmesi gerekmez. Bu sayede kod daha kısa ve okunaklı hale gelir.
Eşzamanlılık
Ayrıca yeni yöntem, eşzamanlılığı destekler. Bu sayede placesClient.fetchPlace
'teki geri çağırma işlevi, placesSwiftClient.fetchPlace
'teki switch
/await
kalıbıyla değiştirilebilir.
// 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)")
}
Son gelişmelerden haberdar olun.
Yeni özellikler ve değişiklikler hakkında bilgi edinmek için iOS için Yerler Swift SDK'sı (Önizleme) sürüm notları sayfasını ziyaret edin.