gpt4 book ai didi

ios - 使用 google place api 添加价格级别很困难

转载 作者:行者123 更新时间:2023-11-30 11:52:29 25 4
gpt4 key购买 nike

使用 Google Places API,我添加了该地点的网站和价格级别。我创建了这个函数:

func didClickWebsite(place: EClass) {
Zone.PlaceDetails(place: place) { (place) in
if let website = place.details?["website"] as? String, let url = URL(string: website) {
let svc = SFSafariViewController.init(url: url)
self.navigationController?.pushViewController(svc, animated: true)
}
}
}

@IBAction func goToWebSite(_ sender: Any) {
if let place = place, let delegate = delegate {
delegate.didClickWebsite(place: place)
}
}

这很有效,因此当我按下按钮时,它会将我发送到该地点的网站。对于价格水平,我试图模仿相同的概念。我在自定义 tableViewCell 类中创建了这个:

func update(place:EClass) {
self.place = place
myLabel.text = place.name
myImage.image = nil
myLabel2.text = place.getDescription()
if let url = place.photos?.first?.getPhotoURL(maxWidth: maxWidht) {
myImage.af_setImage(withURL: url)
}

Zone.PlaceDetails(place: place) { (place) in
if let price = place.details?["price_level"] as? Int, let PriceLevel: Int = Int(price) {
let o = Int(PriceLevel)
self.myPriceLabel.text = "\(o)"
}
}
}

我希望通过标签在表格 View 中显示价格级别,但它不起作用。当我在 tableView 中运行应用程序时,myPriceLabel 保持“标签”不变。我该如何解决这个问题?

更新

static func PlaceDetails(place:EClass, completion: @escaping (EClass) -> Void) {

guard place.details == nil else {
completion(place)
return
}

var params : [String : Any]
params = [
"key" : AppDelegate.googlePlacesAPIKey,
"placeid" : place.placeId,
]

Alamofire.request(googlePlaceDetailsHost, parameters: params, encoding: URLEncoding(destination: .queryString)).responseJSON { response in
let value = response.result.value as? [String : Any]
place.details = (value)?["result"] as? [String : Any]
completion(place)
}
}

最佳答案

首先,这一行是不必要的:let PriceLevel: Int = Int(price) 。您的编译器可能会向您发出警告,告诉您不能对非可选值使用可选绑定(bind)。既然你已经打开price作为 Int 则无需将其传递给另一个 Int在里面。而且您绝对不需要将其传递给第三个 Int使用 let o = Int(PriceLevel) 行进行初始化.

接下来的事情是,因为我假设 Zone.PlaceDetails是一个网络调用,您需要确保您的 myPriceLabel文本正在主队列上更新。也许PlaceDetails已经在主队列上执行完成处理程序,在这种情况下您可以忽略此注释。

最后,如果您没有获得details,您不会提供后备选项。调用中返回对象,或 details没有键“price_level”的值,或者该值不是 Int 。您可以添加 else像这样处理:

Zone.PlaceDetails(place: place) { (place) in
//Make sure your labels are being set on the main queue
DispatchQueue.main.async {
if let price = place.details?["price_level"] as? Int {
self.myPriceLabel.text = "\(price)"
} else {
self.myPriceLabel.text = "UNKNOWN" //Or whatever you want it to say
}
}
}

如果您每次都收到“未知”,我建议您查看 API 文档以找出 price_level 中实际提供的值类型。值(value)。也许它实际上是一个FloatString或其他东西。

关于ios - 使用 google place api 添加价格级别很困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48194392/

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