iOS için Yerler SDK'sından iOS için Yerler Swift SDK'sına geçiş kolaydır ve kademeli olarak yapılabilir. iOS için Places Swift SDK'deki yapılar, Objective-C tabanlı benzerleriyle uyumlu olmadığından GMSPlacesClient'taki API kullanımlarına dayalı olarak ayrı işlev parçalarını taşımanızı öneririz.
Projenize iOS için Places Swift SDK'sını ekleme
iOS için Places Swift SDK'sını kullanmak üzere aşağıdaki adımları uygulamanız gerekir:
- Places API (New)'yi etkinleştirin.
Bağımlılıklarınıza Places Swift SDK'sını ekleyin.
GooglePlaces
,GooglePlacesSwift
veya her ikisini de yükleyebilirsiniz.Places istemcisini
PlacesClient
ile başlatın.
Adım adım geçiş örneği
Örneğin, iOS için Places SDK'sını kullanan bir uygulamanın, metin girişine dayalı 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ıldığında 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 Client başlatıcıyı 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, Places Swift SDK, 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 isteği akışını güncelleyerek başlayabilirsiniz. Eski kod, otomatik tamamlama önerileri istemek için geri çağırma kullanırken yeni kod switch
/await
desenini kullanır. Geri çağırmalar, kod yapısına ve hata işlemeye karmaşıklık katabilir. Yeni Places Swift SDK, 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
başlatma hem de GMSPlaceProperty
bildirimi kaldırarak taşıma işlemini tamamlayın. Places Swift SDK'da yöntem ve sınıf adları, "GMS" önekini kaldıracak şekilde güncellendi.Bu nedenle, bu adların da buna göre güncellenmesi gerekiyor. Örneğin: GMSFetchPlaceRequest
, FetchPlaceRequest
olur.
Tür işleme
Yeni fetchPlace
yöntemi, geliştirilmiş tür işleme özelliğini kullanır. Eski kod, mülkün ham değerlerinin iletilmesini gerektirirken yeni kod, geliştiricilerin burada ham değerleri açıkça getirmesini gerektirmez. Bu sayede, kodun özlülüğü ve okunabilirliği artırılır.
Eşzamanlılık
Ayrıca yeni yöntem eşzamanlılığı destekleyerek placesClient.fetchPlace
içindeki geri çağırma işlevinin placesSwiftClient.fetchPlace
içinde switch
/await
kalıbıyla değiştirilmesine olanak tanır.
// 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 Places Swift SDK'nın sürüm notları sayfasını ziyaret edin.