Autocomplete (新版) 服務是 iOS API,可根據要求傳回地點建議。在要求中,指定文字搜尋字串和地理範圍,控管搜尋區域。
Autocomplete (New) 服務可比對輸入內容的完整字詞和子字串,解析地點名稱、地址和 Plus Codes。因此,應用程式可在使用者輸入內容時傳送查詢,即時提供地點建議。
地點建議是根據指定的輸入文字字串和搜尋區域,建議商家、地址和搜尋點等地點。
舉例來說,您可以使用含有部分使用者輸入內容「Spagh」的字串做為輸入內容,呼叫 API,並將搜尋範圍限制在紐約市。回應接著會包含與搜尋字串和搜尋區域相符的地點建議清單,例如名為「Cafe Spaghetti」的餐廳,以及地點的詳細資料。
傳回的地點建議會顯示給使用者,讓他們選取所需地點。您可以提出 Place Details (New) 要求,取得任何傳回地點建議的詳細資訊。
您可以透過兩種主要方式,將 Autocomplete (New) 功能整合到應用程式中:
- 透過程式輔助方式取得地點預測結果:直接呼叫 API 擷取預測結果,並顯示在自訂使用者介面中。
- 新增 Place Autocomplete 小工具:提供可立即使用的搜尋自動完成體驗,在使用者輸入內容時顯示預測結果。
透過程式輔助方式取得地點預測結果
自動完成 (新版) 要求
在 GMSPlacesClient
上呼叫方法,建立自動完成要求。您可以在 GMSAutocompleteRequest
物件中傳遞參數。回應會在 GMSAutocompletePlaceSuggestion
物件中提供自動完成建議。
必須提供 API 金鑰和query
參數。您也可以加入 GMSAutocompleteSessionToken
將要求與帳單結算期建立關聯,並加入 GMSAutocompleteFilter
將要求套用至結果。
Places Swift SDK 版本
在 PlacesClient
上呼叫方法,建立自動完成要求。您可以在 AutocompleteRequest
物件中傳遞參數。回應會在 AutocompletePlaceSuggestion
物件中提供自動完成建議。
必須提供 API 金鑰和 query
參數。您也可以加入 AutocompleteSessionToken
,將要求與帳單結算期建立關聯,並加入 AutocompleteFilter
,將要求套用至結果。
如要進一步瞭解必要和選用參數,請參閱本文的參數部分。
Places Swift SDK
let center = (37.3913916, -122.0879074) let northEast = (37.388162, -122.088137) let southWest = (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) switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) { case .success(let autocompleteSuggestions): // Handle suggestions. case .failure(let placesError): // Handle error. }
Swift
let token = GMSAutocompleteSessionToken() let northWestBounds = CLLocationCoordinate2DMake(40.921628, -73.700051) let southEastBounds = CLLocationCoordinate2DMake(40.477398, -74.259087) let filter = GMSAutocompleteFilter() filter.types = [kGMSPlaceTypeRestaurant] filter.locationBias = GMSPlaceRectangularLocationOption(northWestBounds, southEastBounds) let request = GMSAutocompleteRequest(query:"Spagh") request.filter = filter request.sessionToken = token GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in if let error = error { print("Autocomplete error: \(error)") return } if let autocompleteResults = results { for result in autocompleteResults { print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText))") } } })
Objective-C
CLLocationCoordinate2D northEast = CLLocationCoordinate2DMake(37.388162, -122.088137); CLLocationCoordinate2D southWest = CLLocationCoordinate2DMake(37.395804, -122.077023); GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.types = @[ kGMSPlaceTypeRestaurant ]; filter.locationBias = GMSPlaceRectangularLocationOption(northEast, southWest); GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Sicilian piz"]; request.sessionToken = token; request.filter = filter; [[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){ // Handle response for (GMSAutocompleteSuggestion *suggestion in results) { if (suggestion.placeSuggestion) { // Show place suggestion data. } } }];
自動完成 (新版) 回應
自動完成功能最多會傳回五個 GMSAutocompleteSuggestion
例項的陣列。陣列包含:
placeID
types
:適用於這個地點的類型。distanceMeters
:與起點的距離。attributedFullText
:建議的完整文字,方便使用者閱讀。attributedPrimaryText
:建議中使用者可自然閱讀的主要文字。attributedSecondaryText
:建議的次要文字,可供使用者閱讀。structuredFormat
:具體名稱和消歧文字,例如城市或區域。
必要參數
查詢
要搜尋的文字字串。指定完整字詞和子字串、地點名稱、地址和 Plus Codes。Autocomplete (New) 服務會根據這個字串傳回候選相符項目,並會依據觀察到的關聯性排序結果。
選用參數
sessionToken
工作階段符記是由使用者產生的字串,可將透過小工具和程式輔助方式發出的 Autocomplete (New) 呼叫,一併追蹤為「工作階段」。自動完成 (新版) 會使用工作階段符記,將使用者自動完成搜尋的查詢和選取階段歸入不同的工作階段,以用於計費。詳情請參閱「工作階段權杖」。
選用的 AutocompleteFilter 參數
類型
一個地點只能有一個主要類型,且必須來自表 A 或表 B。舉例來說,主要類型可能是 mexican_restaurant
或 steak_house
。
根據預設,API 會根據 input
參數傳回所有地點,無論與地點相關聯的主要類型值為何。傳送 types
參數,將結果限制為特定主要類型。
使用這個參數,從表 A 或表 B 指定最多五個類型值。地點必須符合其中一個指定的主要類型值,才會納入回應。
如有下列情況,要求就會遭拒,並傳回 INVALID_REQUEST
錯誤:
- 指定超過五個類型。
- 指定任何無法辨識的類型。
舉例來說,如要將結果限制為運動用品店,請在 AutocompleteFilter
中指定該類型:
Places Swift SDK
let filter = AutocompleteFilter(types: [ PlaceType(rawValue: "sporting_goods_store") ])
Swift
let filter = GMSAutocompleteFilter() filter.types = ["sporting_goods_store"]
Objective-C
GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.types = @[ "sporting_goods_store" ];
國家/地區
只納入指定區域的結果,最多可指定 15 個 ccTLD (「頂層網域」) 雙字元值,並以陣列形式指定。如果省略這項設定,系統不會對回覆內容套用任何限制。 舉例來說,如要將地區限制為德國和法國,請執行下列操作:
Places Swift SDK
let filter = AutocompleteFilter(countries: ["DE", "FR"])
Swift
let filter = GMSAutocompleteFilter() filter.countries = ["DE", "FR"]
Objective-C
GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.countries = @[ @"DE", @"FR" ];
如果同時指定 locationRestriction
和 countries
,結果會位於這兩項設定的交集區域。
inputOffset
以零為基準的 Unicode 字元位移值,表示 input
中的游標位置。游標位置可能會影響系統傳回的預測結果。如果為空白,則預設為 input
的長度。
locationBias 或 locationRestriction
您可以指定 locationBias
或 locationRestriction
(但不能同時指定兩者),定義搜尋區域。locationRestriction
可視為指定結果必須位於的區域,locationBias
則可視為指定結果必須靠近的區域,但可位於該區域外。
locationBias
會指定要搜尋的區域。這個位置會做為偏誤,也就是說,系統可能會傳回指定位置附近的結果,包括指定區域外的結果。locationRestriction
會指定要搜尋的區域。系統不會傳回指定區域外的結果。
將 locationBias
或 locationRestriction
區域指定為矩形檢視區塊或圓形。
圓形是由中心點和半徑 (以公尺為單位) 所定義。半徑必須介於 0.0 至 50000.0 之間 (含首尾)。預設值為 0.0。如果是 locationRestriction
,半徑必須設為大於 0.0 的值。否則要求不會傳回任何結果。
例如:
Places Swift SDK
let center = CLLocationCoordinate2DMake(40.477398, -74.259087) let bias = CircularCoordinateRegion(center: center, radius: 1000.0) let filter = AutocompleteFilter(coordinateRegionBias: bias)
Swift
let center = CLLocationCoordinate2DMake(40.730610, -73.935242) let radius = 1000.0 filter.locationBias = GMSPlaceCircularLocationOption(center, radius)
Objective-C
CLLocationCoordinate2D center = CLLocationCoordinate2DMake(40.730610, -73.935242); radius = 1000.0; GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.locationBias = GMSPlaceCircularLocationOption(center, radius);
矩形是經緯度可視區域,以兩個對角 low
和 high
點表示。可視區域視為封閉區域,因此包含邊界。緯度範圍必須介於 -90 到 90 度之間 (含首尾),經度範圍則必須介於 -180 到 180 度之間 (含首尾):
- 如果
low
=high
,可視區域就是該單一點。 - 如果
low.longitude
>high.longitude
,經度範圍會反轉 (可視區會跨越 180 度的經度線)。 - 如果
low.longitude
= -180 度且high.longitude
= 180 度,則可視區會包含所有經度。 - 如果
low.longitude
= 180 度且high.longitude
= -180 度,經度範圍會空白。
low
和 high
都必須填入值,且代表的方塊不得為空白。如果檢視區塊為空白,就會發生錯誤。
舉例來說,這個可視區域完全涵蓋紐約市:
Places Swift SDK
let northEast = CLLocationCoordinate2DMake(40.477398, -74.259087) let southWest = CLLocationCoordinate2DMake(40.921628, -73.700051) let filter = AutocompleteFilter(coordinateRegionBias: bias)
Swift
let high = CLLocationCoordinate2DMake(40.921628, -73.700051) let low = CLLocationCoordinate2DMake(40.477398, -74.259087) let filter = GMSAutocompleteFilter() filter.locationBias = GMSPlaceRectangularLocationOption(high, low)
Objective-C
CLLocationCoordinate2D high = CLLocationCoordinate2DMake(40.477398, -74.259087); CLLocationCoordinate2D low = CLLocationCoordinate2DMake(440.921628, -73.700051); GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.locationBias = GMSPlaceRectangularLocationOption(high, low);
origin
計算與目的地直線距離的起點 (以 distanceMeters
形式傳回)。如果省略這個值,系統就不會傳回直線距離。必須指定為經緯度座標:
Places Swift SDK
let filter = AutocompleteFilter(origin: CLLocation(latitude: 37.395804, longitude: -122.077023))
Swift
let filter = GMSAutocompleteFilter() filter.origin = CLLocation(latitude: 37.395804, longitude: -122.077023)
Objective-C
GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.origin = [[CLLocation alloc] initWithLatitude:37.395804 longitude: -122.077023];
regionCode
用來格式化回應的區碼,指定為 ccTLD (「頂層網域」) 的兩位字元值。大多數 ccTLD 代碼與 ISO 3166-1 代碼相同,但有一些需要注意的例外情況。舉例來說,英國的 ccTLD 是「uk」(即 .co.uk),而 ISO 3166-1 代碼是「gb」(技術上是指「大不列顛及北愛爾蘭聯合王國」實體)。
如果指定無效的地區代碼,API 會傳回 INVALID_ARGUMENT
錯誤。視適用法律而定,這項參數可能會影響結果。
shouldIncludePureServiceAreaBusinesses
如果為 true
,則會在回應陣列中傳回純服務範圍商家。純區域服務商家是指直接為顧客提供送貨或到府服務,但不在商家地址提供服務的商家。
例如:
Places Swift SDK
let filter = AutocompleteFilter() filter.shouldIncludePureServiceAreaBusinesses = true
Swift
let filter = AutocompleteFilter() filter.shouldIncludePureServiceAreaBusinesses = true
Objective-C
GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.shouldIncludePureServiceAreaBusinesses = YES;
新增 Place Autocomplete 小工具
如要更輕鬆地提供一致的 Place Autocomplete 體驗,您可以將 Place Autocomplete 小工具新增至應用程式。這個小工具提供專用的全螢幕介面,可處理使用者輸入內容、向使用者顯示地點預測結果,並將 AutocompletePlaceSuggestion
物件傳回應用程式。接著,您可以發出 Place Details (New) 要求,取得任何地點預測結果的額外資訊。
與透過程式輔助方式取得地點預測結果時相同,Place Autocomplete 小工具可讓您使用工作階段符記,將自動完成要求分組為工作階段,以用於計費。您可以呼叫 AutocompleteSessionToken()
傳遞工作階段權杖。
如果您未提供工作階段符記,小工具會為您建立 Autocomplete 工作階段符記,然後可從 onSelection
回呼取得。如要進一步瞭解如何使用工作階段符記,請參閱「關於工作階段符記」。
如果 show
繫結值設為 true
,系統會將使用者帶往全螢幕檢視畫面,讓他們選取地點。使用者輸入內容時,小工具會傳回地點建議,例如商家、地址和搜尋點。使用者選取地點時,小工具會使用所選地點呼叫 onSelection
處理常式,並關閉全螢幕檢視畫面。
Place Autocomplete 小工具參數
除了可透過程式輔助使用的參數,Place Autocomplete 小工具也提供下列參數。
顯示
show
指定是否顯示小工具。
AutocompleteUICustomization
AutocompleteUICustomization
參數會指定要套用至小工具的 UI 自訂項目。自訂選項包括:
AutocompleteListDensity
。 這個參數可讓您選擇建議清單的密度,可以是multiLine
或twoLine
。AutocompleteUIIcon
。這個參數可讓您選擇是否要顯示每個清單項目的預設圖示。
onSelection
選取地點時要執行的關閉作業。
onError
發生錯誤時要執行的閉包。如果發生錯誤,系統會傳遞 PlacesError
。
Autocomplete (新版) 範例
使用 locationRestriction 和 locationBias
Autocomplete (新版) 預設會使用 IP 偏誤來控管搜尋區域。使用 IP 偏誤時,API 會使用裝置的 IP 位址來偏誤結果。您可以選擇使用 locationRestriction
或 locationBias
(但不能同時使用),指定要搜尋的區域。
地點限制會指定搜尋區域。系統不會傳回指定區域外的結果。以下範例使用地點限制,將要求限制為以舊金山為中心、半徑 5000 公尺的圓形地點限制:
Places Swift SDK
let center = (37.775061, -122.419400) let radius = 5000.0 let restriction = CircularCoordinateRegion(center: center, radius: radius) let filter = AutocompleteFilter(coordinateRegionRestriction: restriction) let token = AutocompleteSessionToken() let autocompleteRequest = AutocompleteRequest(query: "Sicilian piz", sessionToken: token, filter: filter) switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) { case .success(let autocompleteSuggestions): for suggestion in autocompleteSuggestions { switch suggestion { case .place: // Show place suggestion data. } } case .failure(let placesError): // Handle error. }
Swift
let token = GMSAutocompleteSessionToken() let center = CLLocationCoordinate2DMake(37.775061, -122.419400) let radius = 5000.0 let filter = GMSAutocompleteFilter() filter.locationRestriction = GMSPlaceCircularLocationOption(center, radius) let request = GMSAutocompleteRequest(query:"Piz") request.filter = filter request.sessionToken = token GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in if let error = error { print("Autocomplete error: \(error)") return } if let autocompleteResults = results { for result in autocompleteResults { print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText))") } } })
Objective-C
CLLocationCoordinate2D center = CLLocationCoordinate2DMake(37.775061, -122.419400); radius = 5000.0; GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.locationRestriction = GMSPlaceCircularLocationOption(center, radius); GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Sicilian piz"]; request.sessionToken = token; request.filter = filter; [[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){ // Handle response for (GMSAutocompleteSuggestion *suggestion in results) { if (suggestion.placeSuggestion) { // Show place suggestion data. } } }];
位置偏向設定會將位置當做偏向,也就是說,系統可能會傳回指定位置附近的結果,包括指定區域外的結果。下一個範例會變更先前的要求,改為使用位置偏誤:
Places Swift SDK
let center = (37.775061, -122.419400) let radius = 5000.0 let bias = CircularCoordinateRegion(center: center, radius: radius) let filter = AutocompleteFilter(coordinateRegionBias: bias) let token = AutocompleteSessionToken() let autocompleteRequest = AutocompleteRequest(query: "Sicilian piz", sessionToken: token, filter: filter) switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) { case .success(let autocompleteSuggestions): for suggestion in autocompleteSuggestions { switch suggestion { case .place: // Show place suggestion data. } } case .failure(let placesError): // Handle error. }
Swift
let token = GMSAutocompleteSessionToken() let center = CLLocationCoordinate2DMake(37.775061, -122.419400) let radius = 5000.0 let filter = GMSAutocompleteFilter() filter.locationBias = GMSPlaceCircularLocationOption(center, radius) let request = GMSAutocompleteRequest(query:"Piz") request.filter = filter request.sessionToken = token GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in if let error = error { print("Autocomplete error: \(error)") return } if let autocompleteResults = results { for result in autocompleteResults { print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText))") } } })
Objective-C
CLLocationCoordinate2D center = CLLocationCoordinate2DMake(37.775061, -122.419400); radius = 5000.0; GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.locationBias = GMSPlaceCircularLocationOption(center, radius); GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Sicilian piz"]; request.sessionToken = token; request.filter = filter; [[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){ // Handle response for (GMSAutocompleteSuggestion *suggestion in results) { if (suggestion.placeSuggestion) { // Show place suggestion data. } } }];
用途類型
使用 types 參數,將要求結果限制為表 A 和表 B 中列出的特定類型。您最多可以指定五個值的陣列。如果省略,系統會傳回所有類型。
以下範例指定「Soccer」的查詢字串,並使用 types 參數將結果限制為 "sporting_goods_store"
類型的場所:
Places Swift SDK
let filter = AutocompleteFilter(types: [ PlaceType(rawValue: "sporting_goods_store") ]) let token = AutocompleteSessionToken() let autocompleteRequest = AutocompleteRequest(query: "Soccer", sessionToken: token, filter: filter) switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) { case .success(let autocompleteSuggestions): for suggestion in autocompleteSuggestions { switch suggestion { case .place: // Show place suggestion data. } } case .failure(let placesError): // Handle error. }
Swift
let token = GMSAutocompleteSessionToken() let filter = GMSAutocompleteFilter() filter.types = ["sporting_goods_store"] let request = GMSAutocompleteRequest(query:"Soccer") request.filter = filter request.sessionToken = token GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in if let error = error { print("Autocomplete error: \(error)") return } if let autocompleteResults = results { for result in autocompleteResults { print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText))") } } })
Objective-C
GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.types = @[ "sporting_goods_store" ]; GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Soccer"]; request.sessionToken = token; request.filter = filter; [[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){ // Handle response for (GMSAutocompleteSuggestion *suggestion in results) { if (suggestion.placeSuggestion) { // Show place suggestion data. } } }];
使用來源
在要求中加入 origin
參數 (指定為經緯度座標) 時,API 會在回應中加入從起點到目的地的直線距離。回應會以 distanceMeters
形式傳回距離。
這個範例將原點設為舊金山中心:
Places Swift SDK
let filter = AutocompleteFilter(origin: CLLocation(latitude: 37.7749, longitude: -122.4194)) let token = AutocompleteSessionToken() let autocompleteRequest = AutocompleteRequest(query: "Amoeba", sessionToken: token, filter: filter) switch await placesClient.fetchAutocompleteSuggestions(with: autocompleteRequest) { case .success(let autocompleteSuggestions): for suggestion in autocompleteSuggestions { switch suggestion { case .place: // Show place suggestion data. } } case .failure(let placesError): // Handle error. }
Swift
let token = GMSAutocompleteSessionToken() let origin = CLLocation(latitude: 37.7749, longitude: -122.4194) let filter = GMSAutocompleteFilter() filter.origin = origin let request = GMSAutocompleteRequest(query:"Amoeba") request.filter = filter request.sessionToken = token GMSPlacesClient.shared().fetchAutocompleteSuggestions(from: request, callback: { ( results, error ) in if let error = error { print("Autocomplete error: \(error)") return } if let autocompleteResults = results { for result in autocompleteResults { print("Result \(String(describing: result.placeSuggestion?.placeID)) with \(String(describing: result.placeSuggestion?.attributedFullText)) and distance: \(String(describing: result.placeSuggestion?.distanceMeters))") } } })
Objective-C
GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.origin = [[CLLocation alloc] initWithLatitude:37.395804 longitude:-122.077023]; GMSAutocompleteRequest *request = [[GMSAutocompleteRequest alloc] initWithQuery:@"Amoeba"]; request.sessionToken = token; request.filter = filter; [[GMSPlacesClient sharedClient] fetchAutocompleteSuggestionsFromRequest:request callback:^(NSArray<GMSAutocompleteSuggestion *> * results, NSError * error){ // Handle response for (GMSAutocompleteSuggestion *suggestion in results) { if (suggestion.placeSuggestion) { // Show place suggestion data. } } }];
新增 Place Autocomplete 小工具
Places Swift SDK
struct PlaceAutocompleteDemoView: View { @State private var fetchedPlace: Place? @State private var placesError: PlacesError? @State private var showWidget = false public var body: some View { VStack { Button("Search for a place") { showWidget.toggle() } .placeAutocomplete( show: $showWidget, onSelection: { (autocompletePlaceSuggestion, autocompleteSessionToken) in Task { let placesClient = await PlacesClient.shared let fetchPlaceRequest = FetchPlaceRequest( placeID: autocompletePlaceSuggestion.placeID, placeProperties: [.displayName, .formattedAddress], sessionToken: autocompleteSessionToken ) switch await placesClient.fetchPlace(with: fetchPlaceRequest) { case .success(let place): print("Fetched place: \(place)") self.fetchedPlace = place case .failure(let placesError): print("Failed to fetch place: \(placesError)") self.placesError = placesError } } }, onError: { placesError in self.placesError = placesError } ) } } }