【发布时间】:2021-11-25 09:10:14
【问题描述】:
所以我向服务器发出了一个 post 请求。在响应中,我在主线程中运行一些代码并有条件地调用另一个发布请求。我的问题是——我需要等待约 5 秒才能处理条件。不使用 sleep() 怎么办? (使用 sleep 会冻结我的应用)。
func getStuff() {
let server = appState.server + "extension"
let package = self.myID
guard let url = URL(string: server) else { return }
var urlRequest = URLRequest(url: url)
urlRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
urlRequest.addValue("application/json", forHTTPHeaderField: "Accept")
urlRequest.httpMethod = "POST"
guard let data = try? JSONEncoder().encode(package) else { return }
urlRequest.httpBody = data
let task = URLSession.shared.dataTask(with: urlRequest) {
(data, response, error) in
if let error = error {
return
}
guard let data = data else { return }
guard let dataString = String(data: data, encoding: String.Encoding.utf8) else { return }
let jsonData = Data(dataString.utf8)
var decodedJob: Job? = nil
do {
decodedJob = try JSONDecoder().decode(Formatter.self, from: jsonData)
} catch {
print(error.localizedDescription)
}
DispatchQueue.main.async {
self.firstTimeLoading = false
sleep(5) //how do I replicate this behavior without freezing the app?
if array == [] {
otherPostFunction()
}
}
}
task.resume()
}
【问题讨论】:
-
使用睡眠?它对您的应用有什么好处?
-
不要问
sleep()能为你做什么。询问您可以为异步过程做些什么。 -
@ElTomato sleep 冻结应用程序的时间,我只需要某种程序延迟。我正在考虑在这个外部 DispatchQueue 中使用 DispatchQueue.main.asyncAfter,但这不起作用——不知道如何继续。
-
我已经为您的需要提出了建议。我会问谷歌,雅虎!或者如果我是你的话。
-
@ElTomato 你的意思是使用异步/等待?我不能这样做,因为我不在 Swift 5.5 中工作。
标签: ios swift post timer sleep