0
新参者です.Google API Nearby Searchを使用しています。私は閉鎖にカプセル化されたデータを送信する問題を抱えていますが、すでに入力された近傍の情報を持つテーブルですが、closureにplaceID情報を送信して詳細を取得しようとすると、閉鎖時にカプセル化データを管理する
ここで私はplaceIDと近傍を取得し、その後にplaceViewをtableViewに配置します。クラスプレイスは別々のスウィフトファイルにあり、関数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内のコードです。 (placeURL誤って作成することができ、要求が失敗する可能性があり、そしていくつかの変数がnilに次のようになります。
override func viewDidLoad() {
super.viewDidLoad()
downloadPlaceID {
detail.downloadDetails(input: place.placeId, completed: {
})
}
}
の「place_id」である必要がありますあなたは失敗する可能性があります6つの条件を持っています辞書、結果、ステータス)。一番上のブレークダウンを入れて、どれが失敗しているかを確認するために行ごとにデバッグすれば、問題の理解に役立ちます。 –
実際のコードを入力してください。最後の断片はSwiftでも有効ではありません。真ん中の断片は、その中にコメントだけを入れた関数です。最初のフラグメントはどこにも呼び出されません。 – JeremyP
@JeremyP - 実際のコードを書いています。私はplace.idをdownloadPlaceID funcの外に置くことができません。ランダムなplaceIDを置くとplace.placeIDを入れようとするとすべての詳細(電話、住所など)が届きます。 – NikolaS