我有一个GMSAutocompleteViewController,它在按下按钮后显示。代码如下:
let autocompleteController = GMSAutocompleteViewController()
autocompleteController.delegate = self
let fields: GMSPlaceField = GMSPlaceField(rawValue: UInt(GMSPlaceField.name.rawValue) |
UInt(GMSPlaceField.placeID.rawValue))!
autocompleteController.placeFields = fields
let filter = GMSAutocompleteFilter()
filter.type = .geocode
filter.country = "US"
autocompleteController.autocompleteFilter = filter
present(autocompleteController, animated: true, completion: nil)
当用户搜索时,来自视图控制器的结果如下:
并使用此代码,我可以返回该地点的名称以及格式化的地址和属性:
func viewController(_ viewController: GMSAutocompleteViewController, didAutocompleteWith place: GMSPlace) {
print("Place name: \(place.name)")
print("Formatted address: \(place.formattedAddress)")
print("Place attributions: \(place.attributions)")
dismiss(animated: true, completion: nil)
}
打印出-> 地名:Tremosine 格式化的地址:无 位置归因:无
我要返回的是屏幕截图中的第二行,上面写着“意大利布雷西亚省”,这样我就可以将其存储在后端。对如何获取该文本有任何想法吗?
答案 0 :(得分:0)
我找到了解决该问题的方法,并且为此使用了singleton类。
class GoogleLocation {
var lat, lng: Double?
var city, state, country, name: String?
func extractFromGooglePlcae(place: GMSPlace) -> GoogleLocation {
self.lat = place.coordinate.latitude
self.lng = place.coordinate.longitude
self.city = place.name!
self.state = place.addressComponents?.first(where: { $0.type == "administrative_area_level_1" })?.name
self.country = place.addressComponents?.first(where: { $0.type == "country" })?.name
self.name = self.getFullName()
return self
}
private func getFullName() -> String {
//return "\(String(describing: self.city)), \(String(describing: self.state)), \(String(describing: self.country))"
return self.city! + ", " + self.state! + ", " + self.country!
}
}
在viewController中,您应该传递place对象。
func viewController(_ viewController: GMSAutocompleteViewController, didAutocompleteWith place: GMSPlace) {
googleLocation = GoogleLocation().extractFromGooglePlcae(place: place)
}
让我知道您是否对此有任何疑问。 谢谢
答案 1 :(得分:0)
您必须使用 addressComponents 值来获取格式化的地址。
let autocompleteController = GMSAutocompleteViewController()
autocompleteController.delegate = self
let fields: GMSPlaceField = GMSPlaceField(rawValue:
UInt(GMSPlaceField.formattedAddress.rawValue) |
UInt(GMSPlaceField.addressComponents.rawValue))!
autocompleteController.placeFields = fields
let filter = GMSAutocompleteFilter()
filter.type = .geocode
filter.country = "US"
autocompleteController.autocompleteFilter = filter
present(autocompleteController, animated: true, completion: nil)