iOS için Yerler Swift SDK'sına geçiş

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:

  1. Places API (New)'yi etkinleştirin.
  2. Bağımlılıklarınıza Places Swift SDK'sını ekleyin. GooglePlaces, GooglePlacesSwift veya her ikisini de yükleyebilirsiniz.

  3. 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.