返回语句在收到信息之前返回

时间:2015-12-05 01:56:16

标签: ios swift alamofire dispatch

我的swift代码有点麻烦。结束return语句在存储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()

                }

            }

1 个答案:

答案 0 :(得分:0)

原因是因为您正在进行的调用本质上是异步的。而是考虑使用完成处理程序。

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)
}