iOS용 Places SDK에서 iOS용 Places Swift SDK로의 마이그레이션은 간단하며 점진적으로 진행할 수 있습니다. iOS용 Places Swift SDK의 구조체는 Objective-C 기반 대응 항목과 호환되지 않으므로 GMSPlacesClient의 API 사용에 따라 개별 기능 청크를 이전하는 것이 좋습니다.
프로젝트에 iOS용 Places Swift SDK 추가
iOS용 Places Swift SDK를 사용하려면 다음 단계를 따라야 합니다.
- Places API(신규)를 사용 설정합니다.
종속 항목에 Places Swift SDK를 추가합니다.
GooglePlaces
,GooglePlacesSwift
또는 둘 다를 설치할 수 있습니다.PlacesClient
로 Places 클라이언트를 초기화합니다.
단계별 이전 예
예를 들어 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
로 업데이트해야 합니다. 마지막으로 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))")
}
메서드 및 클래스 이름 업데이트
마지막으로 fetchPlace
코드를 리팩터링하고 GMSPlacesClient
초기화와 GMSPlaceProperty
선언을 모두 삭제하여 마이그레이션을 완료합니다. Places Swift SDK에서 메서드 및 클래스 이름이 'GMS' 접두사를 삭제하도록 업데이트되었으며 이에 따라 업데이트해야 합니다.예를 들면 다음과 같습니다. GMSFetchPlaceRequest
이 FetchPlaceRequest
이 됩니다.
유형 처리
새로운 fetchPlace
메서드는 개선된 유형 처리를 사용합니다. 이전 코드에서는 속성의 원시 값을 전달해야 했지만 새 코드에서는 개발자가 여기에서 원시 값을 명시적으로 가져올 필요가 없어 간결성과 가독성이 향상됩니다.
동시 실행
또한 새 메서드는 동시 실행을 지원하므로 placesSwiftClient.fetchPlace
에서 placesClient.fetchPlace
의 콜백을 switch
/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)")
}
최신 정보 받기
iOS용 Places Swift SDK 출시 노트 페이지에서 새로운 기능과 변경사항을 알아보세요.