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(신규)를 사용 설정합니다.
종속 항목에 iOS용 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 클라이언트 이니셜라이저 업데이트
코드를 현대화하고 새 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' 접두사를 삭제하도록 메서드와 클래스 이름이 업데이트되었으며, 이에 따라 업데이트해야 합니다.예를 들면 다음과 같습니다. GMSFetchPlaceRequest
이 FetchPlaceRequest
로 변경됩니다.
유형 처리
새 fetchPlace
메서드는 개선된 유형 처리를 사용합니다. 이전 코드에서는 속성의 원시 값을 전달해야 했지만 새 코드에서는 개발자가 여기에서 원시 값을 명시적으로 가져올 필요가 없으므로 간결성과 가독성이 향상되었습니다.
동시 실행
또한 새 메서드는 동시 실행을 지원하므로 placesClient.fetchPlace
의 콜백을 placesSwiftClient.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 (미리보기) 출시 노트 페이지에서 새로운 기능과 변경사항을 알아보세요.