Foursquare のPhotos From a Venueと Foursquare のExploreに同時に GET リクエストを送信しようとしています。現在 (間違っている場合は訂正してください)、Alamofire を介して要求を行い、SwiftyJSON を使用して応答を JSON オブジェクトに変換する 2 つの方法があります。
以下の makeRequest() を使用してデータを反映するように UITableViewCell のラベルを正常に更新できますが、それぞれのセルの背景写真の UIImage を更新できません。
私の問題は、A) 使用可能な写真の URL を取得すること、および B) 2 つの別々の要求からデータを提供しながら「ピン」を初期化することです。ピンを初期化するには、すべての値を設定する必要があります。あるリクエストから値の 90% を取得し、別のリクエストから 10% (取得する必要がある写真の URL) を取得しています。2 つの別々のリクエストからのデータで「ピン」を初期化するにはどうすればよいですか?
makeImageRequest :
func makeImageRequest() {
let venueID = "43695300f964a5208c291fe3"
let firstURL = "https://api.foursquare.com/v2/venues/\(venueID)/photos"
Alamofire.request(.GET, firstURL, parameters: [
"client_id" : foursquareClientID,
"client_secret" : foursquareClientSecret,
"v" : "20140806",
"m" : "foursquare",
"limit" : "10"
])
.responseJSON { (request, response, data, error) in
println(request)
println(response)
println(error)
let jsonObj = JSON(data!)
self.pins = []
for obj in jsonObj["response"]["photos"]["items"].arrayValue {
let photoURL = obj["prefix"]["suffix"].stringValue
println("the photo url is\(photoURL)")
let pin = Pin(title: obj["venue"]["name"].stringValue, openUntil: obj["venue"]["hours"]["status"].stringValue, address: obj["venue"]["location"]["address"].stringValue, ratingSignals: obj["venue"]["ratingSignals"].stringValue, ratingImage: UIImage(named:"Score8-5")!, venueImage: UIImage(named: "FloraGrubTestImage.jpg")!)
self.pins.append(pin)
}
self.tableView.reloadData()
}
}
そしてmakeRequest
func makeRequest(searchString: String) {
let secondURL = "https://api.foursquare.com/v2/venues/explore"
Alamofire.request(.GET, secondURL, parameters: [
"client_id" : foursquareClientID,
"client_secret" : foursquareClientSecret,
"ll" : "37.71987,-122.470089",
"query" : searchString,
"radius" : "1000",
"limit" : "10",
"v" : "20140806",
"m" : "foursquare"
])
.responseJSON { (request, response, data, error) in
println(request)
println(response)
println(error)
let jsonObj = JSON(data!)
self.pins = []
println(jsonObj)
for obj in jsonObj["response"]["groups"][0]["items"].arrayValue {
let pin = Pin(title: obj["venue"]["name"].stringValue, openUntil: obj["venue"]["hours"]["status"].stringValue, address: obj["venue"]["location"]["address"].stringValue, ratingSignals: obj["venue"]["ratingSignals"].stringValue, ratingImage: UIImage(named:"Score8-5")!, venueImage: UIImage(named: "FloraGrubTestImage.jpg")!)
self.pins.append(pin)
}
self.tableView.reloadData()
}
}
UITableViewCell クラスに別の bindData() メソッドがあります。これは理にかなっていますか?誰でも私を助けることができますか?
更新:私が一緒に働いているエンジニアは、同じメソッド makeRequest 内で別のリクエストを作成し、それを 2 つの別々のメソッドに分割することを気にしないことを提案しました。また、ある種の応答ルーターを提案するチュートリアルをオンラインで読みました。このコードを 1 つのメソッドにリファクタリングする方法について何か提案はありますか?
更新#2:元の質問が私の本当の問題ではないことに気付いたので、この質問の名前を変更しました