Return 声明 returns 收到信息前
Return statement returns before information is received
我的 swift 代码有点问题。存储 JSON 值之前的结束 return 语句 运行s 所以它一直给我 nil。收到值后,我该如何做 return?
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 值分配给填充以下类别的键。但是 vc.displayCatName() 是来自另一个视图控制器的函数,但它在填充类别值之前得到 运行。因此,我看到这些值的唯一方法是使用“拉动刷新”手动刷新页面。所以我想填充信息然后 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()
}
}
这是因为您正在进行的调用本质上是异步的。而是考虑使用完成处理程序。
func getArticleInfo(Id: String, success: (String) -> Void ) {
let url = "www.Test.com"
Alamofire.request(.GET, url).responseJSON { response in
switch response.result {
case .Success:
if let value = response.result.value {
let json = JSON(value)
let singleAsset = json["url"].string
success(singleAsset!)
}
case .Failure(let error):
print(error)
success("TEST")
}
}
}
致电:
getArticleInfo("test") { (asset) -> Void in
print(asset)
}
我的 swift 代码有点问题。存储 JSON 值之前的结束 return 语句 运行s 所以它一直给我 nil。收到值后,我该如何做 return?
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 值分配给填充以下类别的键。但是 vc.displayCatName() 是来自另一个视图控制器的函数,但它在填充类别值之前得到 运行。因此,我看到这些值的唯一方法是使用“拉动刷新”手动刷新页面。所以我想填充信息然后 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()
}
}
这是因为您正在进行的调用本质上是异步的。而是考虑使用完成处理程序。
func getArticleInfo(Id: String, success: (String) -> Void ) {
let url = "www.Test.com"
Alamofire.request(.GET, url).responseJSON { response in
switch response.result {
case .Success:
if let value = response.result.value {
let json = JSON(value)
let singleAsset = json["url"].string
success(singleAsset!)
}
case .Failure(let error):
print(error)
success("TEST")
}
}
}
致电:
getArticleInfo("test") { (asset) -> Void in
print(asset)
}