在这里使用Google API附近的搜索功能。我在将封装的数据发送到闭包中时已经遇到问题,该表已经填充了附近信息,但是当我尝试将placeID信息发送到闭包中以获取详细信息时,它给了我零的提示。

在这里,我得到placeID和附近,然后用places数组填充tableView。类Place在单独的swift文件中,函数downloadPlaceID在ViewController中。

 class Place {

    var placeId: String!
    var vicinity: String!

    var _placeId: String {
        if placeId == nil {
            placeId = ""
        }
        return placeId
    }

    var _vicinity: String {
        if vicinity == nil {
            vicinity = ""
        }
        return vicinity
    }


    init( place: [String:Any]) {

        if let ids = place["id"] as? String {
            self.placeId = ids

        }

        if let vicinities = place["vicinity"] as? String {
            self.vicinity = vicinities

        }

    }

}


func downloadPlaceID (completed: @escaping DownloadComplete) {

        let placeURL = URL(string: nearbyURL)

        Alamofire.request(placeURL!).responseJSON { (response) in
            let result = response.result

            if let dictionary = result.value as? [String:Any] {
                if let results = dictionary["results"] as? [[String:Any]] {

                    if let status = dictionary["status"] as? String  {
                        if status == "OK" {
                            for obj in results {
                                place = Place(place: obj)
                                // here i get all the placeID's
                                places.append(place)
                            }
                        }
                    }
                }
            }
            completed()
        }
    }


然后,我尝试获取详细信息,并在其中放置placeID:

   func downloadDetails( input: String, completed: DownloadComplete) {

        let details = "\(detailsBaseURL)\(detailsPlaceId)\(input)\(detailsKey)\(detailsSearchAPIKey)"
        print(placeID)

        Alamofire.request(details).responseJSON { response in
            let result = response.result

            if let dictionary = result.value as? [String:Any] {

                if let result = dictionary["result"] as? [String:Any] {

                    if let phoneNumber = result["formatted_phone_number"] as? String {
                        self.phone = phoneNumber
                        print(self.phone!)
                    }

                    if let  geometry = result["geometry"] as? [String:Any] {
                        if let location = geometry["location"] as? [String:Any] {
                            if let latitude = location["lat"] as? Double {
                                self.lat = latitude
                                print(self.lat!)
                            }
                            if let longitude = location["lng"] as? Double {
                                self.lng = longitude
                                print(self.lng!)
                            }
                        }
                    }

                    if let openingHours = result["opening_hours"] as? [String:Any] {
                        if let openNow = openingHours["open_now"] as? Bool {
                            self.workHours = openNow
                             print(self.workHours!)
                        }
                    }
                }
            }
        }
    }


这是我试图用来获取详细信息的viewDidLoad内部的代码。

  override func viewDidLoad() {
super.viewDidLoad()


downloadPlaceID {
    detail.downloadDetails(input: place.placeId, completed: {

    })
}



}

最佳答案

它应该是“ place_id”而不是“ id”

  class Place {

        var placeId: String!
        var vicinity: String!

        var _placeId: String {
            if placeId == nil {
                placeId = ""
            }
            return placeId
        }

        var _vicinity: String {
            if vicinity == nil {
                vicinity = ""
            }
            return vicinity
        }


        init( place: [String:Any]) {

            if let ids = place["place_id"] as? String {
                self.placeId = ids

            }

            if let vicinities = place["vicinity"] as? String {
                self.vicinity = vicinities

            }

        }

    }

关于ios - 管理封闭中的封装数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47219899/

10-10 16:41