如何快速传递异步块

时间:2017-10-12 07:14:25

标签: ios json swift parsing

new ProcessBuilder('cmd', '/c', 'cls').inheritIO().start().waitFor()

当我尝试跟踪此代码时,从dataTask跳转到代码结束。我想问一个错误的问题。我希望这段代码完成。抱歉我的英文。

2 个答案:

答案 0 :(得分:0)

func datakontrol() {

    let url = NSURL(string: "http://localhost.192.168.1.40.xip.io:8888/store1.php")

    URLSession.shared.dataTask(with: (url as URL?)!, completionHandler: {(data, response, error) -> Void in

        if let jsonObj = try? JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? NSDictionary {

            guard let telefon = jsonObj!["telefon"] as? String else { return }

            DispatchQueue.main.async {
                  GlobalVariables.telefonum = telefon
            }
        }
    }).resume()
}

答案 1 :(得分:0)

  

当我尝试跟踪此代码时,从dataTask跳转到代码结尾

因为dataTask(with:completionHandler:)asynchronous或仅是async方法。 根据这种方法的官方文件:

  

创建一个检索指定URL内容的任务   完成后调用处理程序。

异步(顾名思义)是一个异步调用,这意味着我们说请做这项工作,我会回复你,然后当它完成它的工作,它调用完成处理程序(换句话说它说我已经完成了我的工作),所以如果你把print语句放在if let jsonObj = try?...之前{{1} ,你会看到它会在一段时间后打印出来。或者您可以在print("I have completed my work")之前放置一个中断/调试点,以查看您的程序是否到达控制位置。

注意:理解这一点的另一种方法是if let jsonObj = try?...函数不阻止当前函数执行,它在后台工作并完成其工作时,在特定情况下“获取来自服务器的数据“,它调用其完成处理程序,程序的控制权返回到此async函数的完成处理程序