【发布时间】:2015-12-05 01:56:16
【问题描述】:
我的 swift 代码有点问题。结束返回语句在存储 JSON 值之前运行,因此它一直给我 nil。收到价值后如何退货?
func getArticleInfo(Id: String) -> String {
let url = val1 + val2 + val3
Alamofire.request(.GET, url).responseJSON { response in
switch response.result {
case .Success:
if let value = response.result.value {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) {
let json = JSON(value)
let singleAsset = json["url"].string
}
}
case .Failure(let error):
print(error)
}
}
return singleAsset
}
感谢您对我遇到的其他问题的帮助。见下文 我试图让类别填充所有信息,然后在完成后调用 vc.displayCatName() 。但它做得太晚了,我必须刷新页面才能看到信息。
以上只是我将 JSON 值分配给填充 BELOW 类别的键。但是 vc.displayCatName() 是来自另一个视图控制器的函数,但它在填充类别值之前运行。因此,我看到这些值的唯一方法是,如果我使用 Pull to Refresh 手动刷新页面。所以我希望填充信息,然后 vc.displayCatName() 应该运行
self.getAsset(id!) { (result) -> Void in
print("this is result \(result)")
let categories = Categories (categoryName: catName, imageId: id, catIdNumber: catIdNumber, imageUrl: result)
vc.cats.append(categories)
}
}
}
dispatch_async(dispatch_get_main_queue()) {
vc.displayCatName()
}
}
【问题讨论】:
-
当你已经在一个异步的completionHandler块中,为什么还需要使用
dispatch_async? -
嗯,你说得对。那么我应该删除调度吗?
-
是的,因为它没有任何用处。
-
这只是解决方案的一部分。正如@SnarfSnarf 所说,您正在进行异步调用,返回语句将在
Alamofire.request调用之后执行。 -
我取出了dispatch,它仍然在完成/获取请求之前运行return语句
标签: ios swift alamofire dispatch