new ProcessBuilder('cmd', '/c', 'cls').inheritIO().start().waitFor()
当我尝试跟踪此代码时,从dataTask跳转到代码结束。我想问一个错误的问题。我希望这段代码完成。抱歉我的英文。
答案 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
函数的完成处理程序