gpt4 book ai didi

swift - 如何创建 GMSPlace

转载 作者:IT王子 更新时间:2023-10-29 05:53:41 27 4
gpt4 key购买 nike

我正在使用 Google Maps iOS SDK并希望存储用户最近搜索的地点(GMSPlace 对象)。我在检索这些地点时遇到问题,因为 GMSPlace 似乎无法直接实例化。

是否可以实例化一个 GMSPlace对象?

谢谢!

最佳答案

创建 GMS PLACE 实例

是的,您可以实例化 GMS Place Object。我在互联网上查找的那天,遇到了您的问题,希望找到答案,但我没有找到任何答案。

因此,我提出了自己的解决方案。以下是创建 GMSPlace 实例的方法。

因此,我的要求是将 3 个 GMS 位置存储在 3 个不同的 GMSPlace 变量中。这是我所做的:

var currentLocation: GMSPlace?
var selectedFromDestination: GMSPlace?
var selectedToDestination: GMSPlace?

现在,currentLocation 将存储用户的当前位置,selectedFromDestination 将存储一个起始地址点,而 selectedToDestination 将存储一个目标地址点。

注意:注意它们都是可选的。这是我唯一让它工作的方法,因为我仍然是 Swift 的菜鸟。

 //MARK:- FUNCTION FOR GETTING CURRENT LOCATION
func getCurrentPlace() {

placesClient.currentPlace(callback: { (placeLikelihoodList, error) -> Void in
if let error = error {
print("Pick Place error: \(error.localizedDescription)")
return
}

if let placeLikelihoodList = placeLikelihoodList {
let place = placeLikelihoodList.likelihoods.first?.place
if let place = place {
self.nameLabel.text = place.name + "\(place.coordinate.latitude) , \(place.coordinate.longitude)"
self.addressLabel.text = place.formattedAddress?.components(separatedBy: ", ")
.joined(separator: "\n")

//assigning returned GMSPlace place object to currentlocation
self.currentLocation = place

}
}
})
}

现在,在我的 viewDidLoad() 方法中,我调用了这个函数 getCurrentPlace(),然后它将获取用户的当前位置并存储在 currentLocation 变量。

现在,您可以在 ViewController 的任何地方访问这个变量,并访问它的属性,例如

 currentLocation?.formattedAddress
currentLocation?.coordinate.latitude
currentLocation?.coordinate.longitude

等等。

现在,如果您想将用户选择的内容存储为取货地址和目的地地址,请阅读下文 :-)

好的,现在您有两个文本字段,您需要在其上打开 GSMAutoCompleteViewController(附:还有其他方法,但我更喜欢使用它,因为它很容易实现。)

因此,您将需要一个 textField Delegate 方法,该方法将根据我的 strTextFieldType 变量区分两个 textField 并显示 ViewController。

//MARK:- TEXTFIELD DELEGATE
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
if textField == txtFromDestination
{
strTxtFieldType = "FromDestination"

}
else if textField == txtToDestination
{
strTxtFieldType = "ToDestination"

}

let acController = GMSAutocompleteViewController()
acController.delegate = self
self.present(acController, animated: true, completion: nil)

return false
}

我已将返回设置为 false,因为我不希望文本字段可编辑。

下面是您需要为 ViewController 实现的扩展代码

extension YOUR_VIEWCONTROLLER_NAME: GMSAutocompleteViewControllerDelegate {

func viewController(_ viewController: GMSAutocompleteViewController, didAutocompleteWith place: GMSPlace) {


print("Place name: \(place.name)")
print("Place address: \(place.formattedAddress ?? "null")")

if strTxtFieldType == "FromDestination"
{
self.txtFromDestination.text = place.formattedAddress
self.selectedFromDestination = place

}
else
{
self.txtToDestination.text = place.formattedAddress
self.selectedToDestination = place
}

print("Place attributions: \(String(describing: place.attributions))")

self.dismiss(animated: true, completion: nil)

}

func viewController(_ viewController: GMSAutocompleteViewController, didFailAutocompleteWithError error: Error) {
// TODO: handle the error.
// print("Error: \(error.description)")
self.dismiss(animated: true, completion: nil)
}

// User canceled the operation.
func wasCancelled(_ viewController: GMSAutocompleteViewController) {
print("Autocomplete was cancelled.")
self.dismiss(animated: true, completion: nil)
}
}

好了,你现在已经完成了。您可以在任何地方访问存储在 selectedFromDestination 和 selectedToDestination 中的值,就像访问 currentLocation GMSPlace 对象一样。

希望这对您有所帮助; :-D !让我知道它是否适合你。

关于swift - 如何创建 GMSPlace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35494076/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com