gpt4 book ai didi

swift - 带有 while 循环的 Alamofire 请求

转载 作者:行者123 更新时间:2023-11-28 05:44:27 25 4
gpt4 key购买 nike

我需要检查循环中的处理状态。需要获取请求

func check( completion: @escaping (Bool)->()){
let url = URL(string: "url")!
var curStatus = "processing"
let serialQueue = DispatchQueue(label: "serialQueue")

while curStatus == "processing" {
serialQueue.async{
let runLoop = CFRunLoopGetCurrent()
Alamofire.request(url, method: .get, parameters: nil)
.responseJSON { response in
guard response.result.isSuccess else {
completion(false)
return
}

guard let value = response.result.value as? [String: Any] else {
completion(false)
return
}
curStatus = value["status"] as? String ?? "error"
if curStatus == "ok" {
// do something
completion(true)
return
}
if curStatus == "error"{
completion(false)
return
}
CFRunLoopStop(runLoop)
}
sleep(2)
CFRunLoopRun()
}

}
}

问题:没有进入 responseJSON。我把断点放在

守卫 response.result.isSuccess else ...

它并没有调用它,而是在行中断点

Alamofire.request(url, ... 工作正常。

我该如何解决这个问题?

对不起我的英语。我刚学。

最佳答案

我真的不认为你应该经常发出网络请求只是为了在服务器端检查是否成功。我认为您需要重新设计您的用户体验。

但是..为了尝试解决您正在尝试做的事情,我建议使用计时器。

伪代码:

let minuteInterval = TimeInterval.minute() * 5
var isMakingRequest = false

let timer = NSTimer.scheduledTimerWithTimeInterval(minuteInterval, target: self, selector: #selector(checkServer), userInfo: nil, repeats: true)

@objc func checkServer() {
guard !isMakingRequest else { return }
isMakingRequest = true
Do network request {
self.isMakingRequest = false
}
}

关于swift - 带有 while 循环的 Alamofire 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55381302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com