Alamofire 呼叫在循环内不起作用

Posted

技术标签:

【中文标题】Alamofire 呼叫在循环内不起作用【英文标题】:Alamofire call not working inside loop 【发布时间】:2016-01-25 03:57:30 【问题描述】:

我有一个循环,旨在使用 Alamofire 对 Youtube 的 API 进行 10 次不同的调用,每个调用都有一个不同的 videoID,我从另一个函数中获得。但是,似乎没有进行调用,因为我没有从 Alamofire 开关中的“成功”或“失败”选项中获得结果。

谁能指出问题所在?

func getRecom(completion: (result:String)->()) 
    let array = defaults.arrayForKey("recomQuery")
    for i in 0..<10  
    let videoURL = "https://www.googleapis.com/youtube/v3/videos?part=contentDetails%2C+snippet&id=\(array![i])&maxResults=10&key=\(apiKey)"

    Alamofire.request(.GET, videoURL).validate().responseJSON  response in
        switch response.result 
        case .Success:
            print("success") //THIS IS NOT BEING CALLED
            if let value = response.result.value 
                let json = JSON(value)
                let videoTitle = json["items"][0]["snippet"]["title"].stringValue
                print("Title from network \(videoTitle)")
                let thumbPath = String(json["items"][0]["snippet"]["thumbnails"]["default"]["url"])
                print(i)
                let image = UIImage(data: NSData(contentsOfURL: NSURL(string: thumbPath)!)!)!
                let newImage: NSData = UIImagePNGRepresentation(image)!
                self.recomTitles.append(videoTitle)
                self.recomThumbs.append(newImage)
            
        case .Failure(let error):
            print("failure") //THIS IS ALSO NOT BEING CALLED
            print(error)
            completion(result: "done")
            
        
    
print("saving array: \(defaults.arrayForKey("recomTitles"))")
defaults.setObject(recomThumbs, forKey: "recomThumbs")
defaults.setObject(recomTitles, forKey: "recomTitles")
completion(result: "done")

提前致谢!

【问题讨论】:

【参考方案1】:

如果您在 Playground 中运行此程序,则程序可能会在调用 print 之前结束,因为您从异步方法调用它。如果是这种情况,请在开头调用 XCPExecutionShouldContinueIndefinitely()。

【讨论】:

谢谢!我发现 Alamofire 可能是一个异步调用,并用我上面的解释修复了它!【参考方案2】:

谢谢大家!我认为这是一个异步调用,以便在时间之前调用完成,我通过在循环中添加来修复它:

if i == 9  completion(result: "done")  //9 being the last index of loop

再次感谢!

【讨论】:

以上是关于Alamofire 呼叫在循环内不起作用的主要内容,如果未能解决你的问题,请参考以下文章

dbms_output.put_line 在存储过程的 Cursor For 循环内不起作用

为啥问号在 %% 内不起作用? [复制]

UIButton 在 UItableViewCell 内不起作用

扑。列 mainAxisAlignment spaceBetween 在 Row 内不起作用

swift isUserInteractionEnabled = false 在 UITapGestureRecognizer 内不起作用

Textblock.TextTrimming 在网格内不起作用