IOS Swift我如何从异步方法中获得价值[重复]

Posted

技术标签:

【中文标题】IOS Swift我如何从异步方法中获得价值[重复]【英文标题】:IOS Swift How can I get value from an Async method [duplicate] 【发布时间】:2018-05-04 04:29:34 【问题描述】:

我是 Swift 新手,想知道如何从异步任务中获取值。我有一个函数可以在返回时从 API 获取 Json 数据我想在异步任务之外获取特定字段的值...我的代码基本上在下面我有一个名为 status 的变量我想在返回异步调用后获取 status 的值,然后我想检查该值是否为 1 。在下面的代码中,返回的值是 1 但是似乎调用的异步是在 if Status == 1 行之前执行的。如果值为 One 那么我想导航到不同的 ViewController 。任何建议都会很棒...我显然不能将代码放到异步代码中的不同 ViewController 中,因为它被调用了很多次。

 func GetData() 
   var status = 0
 // Code that simply contains URL and parameters
   URLSession.shared.dataTask(with:request, completionHandler: (data, response, error) in
            if error != nil 
                print("Error")
             else 
                do 

let parsedData = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! [String:Any]

                    DispatchQueue.main.async 
                        if let Replies = parsedData["Result"] as? [AnyObject]  


                            for Stream in Replies 

                                if let myvalue = Stream["status"] as? Int 
                                    status  = myvalue
                                

                            
                        


                    

                 catch let error as NSError 
                    print(error)
                

            

        ).resume()


       if status == 1 
// This code is executed before the async so I don't get the value
        let nextViewController = self.storyboard?.instantiateViewController(withIdentifier: "Passed") as! Passed
        self.present(nextViewController, animated:false, completion:nil)
        

【问题讨论】:

您需要将最后 4 行移到 for 循环下方,它会起作用。 异步任务。使用闭包 (***.com/a/47713329/6822622) 【参考方案1】:

你可以像这样使用回调函数:

func GetData(callback: (Int) -> Void) 
    //Inside async task, Once you get the values you want to send in callback
    callback(status)

你会从你调用函数的地方得到一个回调。

对于你的情况,Anbu的回答也可以。

【讨论】:

以上是关于IOS Swift我如何从异步方法中获得价值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

ios - 如何使用 Swift 4 延长位置跟踪时间 [重复]

iOS Swift:如何为 Swift 3 进行异步/反应式/事件编程

如何使用 Swift 2 + XCode 7 + iOS 9 获取和解析 JSON [重复]

如何在 iOS Swift 中过滤 JSON 并获取价值?

如何从faker获得独特的价值?

如何在 iOS Swift 中使用段控制从模型中过滤名称、日期?