【问题标题】:placesClient - properly use sharedClient method?placesClient - 正确使用 sharedClient 方法?
【发布时间】:2016-04-14 11:14:20
【问题描述】:

placesClient 给出了持有 nil 值的错误,在阅读了 google places 文档后,我阅读了以下声明:

应通过 [GMSPlacesClient sharedClient] 方法访问此类。

我想知道如何实现 sharedClient 方法,以便根据placesID 运行搜索以获取给定地点的信息?

var placesClient: GMSPlacesClient!

func lookUpPlaceID() {
    let placeID = "ChIJPXw5JDZM6IAR4rTXaFQDGys"

    //What value should placesClient be holding if not GMSPlacesClient in order to run the search based on the placeID?

    self.placesClient.lookUpPlaceID(placeID, callback: { (place, error) -> Void in

    if let error = error {
            print("lookup place id query error: \(error.localizedDescription)")
            return
        }

        if let place = place {
            print("Place name \(place.name)")
            print("Place address \(place.formattedAddress)")
            print("Place placeID \(place.placeID)")
            print("Place attributions \(place.attributions)")
        } else {
            print("No place details for \(placeID)")
        }
    })


}

【问题讨论】:

  • 哎呀。将代码更新为我实际拥有的代码。什么可能是不正确的?谢谢
  • placesClient(声明为隐式展开的可选)为 nil,而不是 placeID
  • 哇,这很有趣。但是现在我肯定不知道应该做什么才能通过 google places api 获取信息。 :(
  • 我的第一个真正的应用程序进程。但仍然没有真正得到应该为 placesClient 分配什么值?

标签: swift callback google-places-api google-maps-sdk-ios


【解决方案1】:

sharedClient 是 Objective C 中的类方法。在 Swift 中,您将其视为 Type Method。因此,不要将placesClient 分配给GMSPlacesClient 类型,而是将其分配给sharedClient 类型方法的结果:

let placesClient = GMSPlacesClient.sharedClient()

placesClient 现在将持有一个GMSPlacesClient实例(一个共享实例,如果没有被垃圾回收,以后对sharedClient 的调用将返回相同的实例),而不是像您的原始代码一样持有 type

【讨论】:

  • 啊,非常感谢!但是当我用那个代码尝试它时,我也会得到一个错误。 Xcode 想要括号和共享客户端之间的分号?该类是否需要继承任何特定类或任何委托协议?
  • 糟糕,是的,一个错字。 (对不起,我的 Swift 有点生锈了)。 let placesClient = GMSPlacesClient.sharedInstance 我认为应该可以。 (let 而不是 var,因为您很可能不需要/不想重新分配它)。
  • sharedClient() ///reportDeviceAtPlaceWithID(placeID: String)///lookUpPlaceID()/// currentPlaceWithCallback() ///autocompleteQuery/// addPlace() 以上是GMSPlacesClient的方法 一直在尝试使用它,但 sharedInstance 不是 GMSPlacesClient 类中的方法之一,并给出错误“类型 GMSPlacesClient 没有成员“sharedInstance”。我觉得我们真的很接近解决这个问题了哈哈
  • 糟糕,我的意思是let placesClient = GMSPlacesClient.sharedClient()(这就是我编辑答案的方式!)。对不起,重复的错别字:(
  • 是的,您的代码运行良好,但在应用程序委托中我收到 sigabrt 错误。多一点调试让我去!
猜你喜欢
  • 1970-01-01
  • 2021-06-19
  • 1970-01-01
  • 2015-12-17
  • 2012-02-23
  • 2013-01-09
  • 2010-12-28
  • 2012-04-26
  • 2014-10-24
相关资源
最近更新 更多