iOS용 Places Swift SDK (미리보기)로 이전

iOS용 Places SDK에서 iOS용 Places Swift SDK (미리보기)는 간단해야 하며 수행할 수 있습니다. 개선해야 합니다 iOS용 Places Swift SDK (미리보기)의 구조체는 Objective-C 기반 환경과 호환되는 경우 GMSPlacesClient의 API 사용에 기반한 개별 기능 청크입니다.

프로젝트에 iOS용 Places Swift SDK (미리보기) 추가

iOS용 Places Swift SDK (미리보기)를 사용하려면 다음 단계를 따라야 합니다.

  1. Places API를 사용 설정합니다. (신규).
  2. iOS용 Places Swift SDK (미리보기) 제공합니다
  3. 다음을 사용하여 Places 클라이언트 초기화 PlacesClient

단계별 이전 예시

예를 들어 iOS용 Places SDK를 사용하는 앱이 있다고 가정해 보겠습니다. 입력된 텍스트를 바탕으로 자동 완성 추천을 받은 다음, 첫 번째 장소 추천의 세부정보입니다. 사용 iOS용 Places SDK를 사용하는 경우 기존 코드는 다음과 같습니다.

// 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 이니셜라이저 업데이트

코드를 현대화하고 새 SDK의 기능을 활용하려면 GMSPlacesClient를 PlacesClient로 바꿔야 합니다. 또한 매개변수 이름이 새 메소드에서 변경되므로 매개변수를 with 대신 from로 변경합니다. 마지막으로 iOS용 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 패턴. 콜백은 코드 구조를 더 복잡하게 만들고 도움이 됩니다. iOS용 새로운 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))")
}

메서드 및 클래스 이름 업데이트

마지막으로 fetchPlace 코드를 리팩터링하여 이전을 완료합니다. GMSPlacesClient 초기화 및 GMSPlaceProperty 모두 삭제 선언했습니다. iOS용 Places Swift SDK (미리보기)에서 메서드 및 클래스 이름 'GMS'를 삭제하도록 업데이트되었습니다. 접두사로 지정되며 이에 따라 업데이트해야 합니다 예: GMSFetchPlaceRequestFetchPlaceRequest가 됩니다.

유형 처리

fetchPlace 메서드는 개선된 유형 처리를 사용합니다. 이전 코드는 필수 속성이며, 새 코드에는 개발자가 원시 값을 명시적으로 가져올 수 있으므로 정확한 데이터 파악과 있습니다.

동시 실행

또한 새 메서드는 동시 실행을 지원하므로 placesClient.fetchPlace의 콜백을 placesSwiftClient.fetchPlaceswitch/await 패턴으로 대체할 수 있습니다.

// 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)")
}