Ios 阿拉莫菲尔打了两次电话
我试着用阿拉莫菲尔,但它真的很奇怪。 我正在调用这个函数并进行调试,它被调用了两次,我不知道为什么 在第一次它只是跳转所有的函数而不做任何事情,第二次正常运行Ios 阿拉莫菲尔打了两次电话,ios,swift,alamofire,Ios,Swift,Alamofire,我试着用阿拉莫菲尔,但它真的很奇怪。 我正在调用这个函数并进行调试,它被调用了两次,我不知道为什么 在第一次它只是跳转所有的函数而不做任何事情,第二次正常运行 override func viewDidLoad() { super.viewDidLoad() download{ //do stuffs } } func download(completed: @escaping DownloadComplete){ Alamofire.re
override func viewDidLoad() {
super.viewDidLoad()
download{
//do stuffs
}
}
func download(completed: @escaping DownloadComplete){
Alamofire.request("https://httpbin.org/get").responseJSON { response in
print(response.request ?? "") // original URL request
print(response.response ?? "") // HTTP URL response
print(response.data ?? "") // server data
print(response.result) // result of response serialization
if let JSON = response.result.value {
print("JSON: \(JSON)")
}
completed()
}
}
此ViewController由带标识符的PerformScheue调用。我不知道可能是什么。检查你的故事板(连接检查器,⌘ + ⌥ + 6) 如果没有重复的旧连接。我假设您正在请求行上放置断点。当你这么做的时候,它会触发两次。第一次发送请求,第二次收到响应。编译器将完成块视为一行,并再次在同一行上触发。可能是调试语句本身导致了额外的请求。例如,如果您这样做是为了查看请求的外观,那么它将实际发出请求
let test = session.request(url);
print("Debug print request")
// this will make first call even though response is not handled
debugPrint(test)
// second call
session.request(url).responseJson....
在这个if:if-let JSON=response.result.value{//call here perform segue print(“JSON:(JSON)”)}内调用perform segue,因为它是异步调用。调用了两次什么函数?由于请求是异步的,因此它将运行
。request
一次,然后在一秒钟后实际运行块的内容。如果可能,将print
放在代码的不同位置并显示结果。“Alamofire.request”看起来运行了两次。它是否打印了两次?调用viewDidLoad
方法的次数是否超过两次?尝试将print(“viewDidLoad”)
直接放在viewDidLoad
函数的开头。没有重复:/Wow!我想知道更多关于这一点,你能解释一下为什么当你试图打印一些东西时会再次执行请求吗?或者你有我可以深入了解的链接吗?非常感谢。编辑此项解决了我的问题,从代码中删除诸如print(“invokedURL:\(request.urlRequest?.url?.absoluteString)”)
之类的语句可以减少请求的重复。现在有人给它打过一次电话,但我仍然想知道为什么会这样。