Миграция с Places SDK для iOS на Places Swift SDK для iOS должна быть простой и может выполняться поэтапно. Поскольку структуры в Places Swift SDK для iOS несовместимы с их аналогами на Objective-C, мы рекомендуем переносить отдельные фрагменты функциональности, основанные на использовании API в GMSPlacesClient.
Добавьте Places Swift SDK для iOS в свой проект
Для использования Places Swift SDK для iOS необходимо выполнить следующие шаги:
- Включить API Places (новое) .
- Добавьте Places Swift SDK в список зависимостей. Вы можете установить - GooglePlaces,- GooglePlacesSwiftили оба.
- Инициализируйте клиент Places с помощью - PlacesClient.
Пошаговый пример миграции
Например, предположим, что приложение, использующее Places SDK для iOS, получает подсказки автодополнения на основе введенного текста, а затем извлекает информацию из первой подсказки. При использовании Places SDK для iOS существующий код может выглядеть примерно так:
// 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
 Чтобы модернизировать код и воспользоваться возможностями нового SDK, необходимо заменить GMSPlacesClient на PlacesClient. Кроме того, в новом методе изменены имена параметров, поэтому необходимо заменить параметр на from вместо with . Наконец, Places Swift SDK использует обновлённый AutocompleteRequest . 
Обновленный код
// Initialize Places Swift Client.
let _ = PlacesClient.provideAPIKey(apiKey)
let placesSwiftClient = PlacesClient.shared
Исходный код
// Initialize Places Client.
GMSPlacesClient.provideAPIKey(apiKey)
let client = GMSPlacesClient.shared()
Обновите запрос автозаполнения
 Вы можете начать с обновления потока запросов автодополнения. Старый код использует обратный вызов для запроса подсказок автодополнения, а новый — шаблон switch / await . Обратные вызовы могут усложнить структуру кода и обработку ошибок. Новый Places Swift SDK поддерживает параллелизм, что упрощает асинхронные операции.
// 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))")
}
Заменить устаревшие классы, методы и определения типов
Следующие классы, методы и определения типов в Places SDK для iOS устарели, начиная с версии 10.4. Они будут недоступны в версии 11.0, которая выйдет в третьем квартале 2026 года.
В этой таблице показаны устаревшие методы и их замены:
| Устаревший | Замена | 
|---|---|
| currentPlaceWithCallbackилиfindPlaceLikelihoodsFromCurrentLocationWithPlaceFields | searchNearbyWithRequest | 
| lookUpPlaceIDилиfetchPlaceFromPlaceID | fetchPlaceWithRequest | 
| lookUpPhotosForPlaceIDилиloadPlacePhoto | fetchPhotoWithRequest | 
| GMSAutocompletePrediction | AutocompleteSuggestion | 
| findAutocompletePredictionsFromQueryилиGMSAutocompleteFetcher | fetchAutocompleteSuggestionsFromRequest | 
| isOpenWithPlaceIDилиisOpenWithPlace | isOpenWithRequest | 
| GMSAutocompleteResultsViewController,GMSAutocompleteTableDataSourceилиGMSAutocompleteViewController | placeAutocomplete | 
Обновить имена методов и классов
 Наконец, завершите миграцию, выполнив рефакторинг кода fetchPlace и удалив как инициализацию GMSPlacesClient , так и объявление GMSPlaceProperty . В Places Swift SDK имена методов и классов были обновлены с целью удаления префикса «GMS» и должны быть обновлены соответствующим образом; например, GMSFetchPlaceRequest становится FetchPlaceRequest .
Обработка типов
 Новый метод fetchPlace использует улучшенную обработку типов. В то время как старый код требовал передачи необработанных значений свойства, новый код не требует от разработчиков явного извлечения необработанных значений, что повышает краткость и читаемость.
Параллелизм
 Кроме того, новый метод поддерживает параллелизм, позволяя заменить обратный вызов в placesClient.fetchPlace шаблоном switch / await в 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)")
}
Будьте в курсе событий
Посетите страницу заметок о выпуске Places Swift SDK для iOS, чтобы узнать о новых функциях и изменениях.