2017-05-09 44 views
1

我想使用阿拉莫菲尔,但它真的很奇怪。 我打电话给这个函数和调试,它被调用了两次,我不知道为什么。阿拉莫菲尔叫了两次

它第一次只是跳跃所有的功能,没有做任何事情,第二次运行正常。

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它被PerformSegue WithIdentifier调用。我不知道会是什么。

+0

调用这个好像里面进行赛格瑞:如果让JSON = {response.result.value // 电话这里执行segue print(“JSON:\(JSON)”) }因为它是异步调用 –

+0

什么函数被调用两次?由于请求是异步的,因此预计它会运行'.request'一次,然后在一秒后实际运行块的内容。如果可能的话,将'print'放在代码的不同位置并显示结果。 – Oskar

+0

“Alamofire.request” 它看起来像跑两次。 –

回答

0

如果没有重复的旧连接,请检查您的故事板(连接检查器,⌘+⌥+ 6)。

+0

没有重复:/ –

0

我假设你在请求行上放置了一个断点。当你这样做时,它会触发两次。第一次发送请求时,第二次当您收到响应。编译器将完成块视为1行,并再次在同一行上触发。

1

它可能是调试语句本身导致额外的请求。例如,如果你做这样的事情,看看该请求将是什么样子,然后它实际上将发出请求

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.... 
+1

哇!我想更多地了解这一点,你能否解释为什么当你尝试打印某些东西时再次执行请求?或者你有链接,我可以更深入地看看?谢谢! **编辑** 这解决了我的问题,从代码中删除诸如'print(“invokedURL:\(request.urlRequest?.url?.absoluteString)”)的语句减少了请求的重复。现在它被召唤了一次,但我仍然想知道为什么那样工作。 – mayoralito