Alamofire在电话中提供额外的参数"错误

时间:2017-03-18 16:21:46

标签: ios swift alamofire

我试图使用Alamofire进行数据请求。以前我没有Alamofire的这个任务的代码是:

    let url = URL(string: urlString)
    URLSession.shared.dataTask(with: url!, completionHandler: { (data, response, error) in

        //download hit an error so lets return out
        if error != nil {
            print(error)
            return
        }

        DispatchQueue.main.async(execute: {

            if let downloadedImage = UIImage(data: data!) {
                imageCache.setObject(downloadedImage, forKey: urlString as NSString)

                self.image = downloadedImage
            }
        })

    }).resume()

尝试使用Alamofire,我试过了:

    let url = URL(string: urlString)
    Alamofire.request(.get, url)
        .responseImage { response in

            DispatchQueue.main.async(execute: {
                if let downloadedImage = response.result.value {
                    // image is here.
                    imageCache.setObject(downloadedImage, forKey: urlString as NSString)
                    self.image = downloadedImage
                }else{
                    // check what happened.
                }
            })
    }

但是我在请求参数中的url上收到错误,"调用"中的额外参数。我在SO上检查了同一问题的其他问题,他们似乎都试图传递不同的参数,而不仅仅是一个URL,所以我不确定如何应用这些答案。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

Alamofire.request参数已更改。第一个参数曾经是HTTP方法,但现在URL是第一个参数,method参数是第二个(并且是可选的):

let url = URL(string: urlString)!    // note, unwrap the optional URL
Alamofire.request(url, method: .get)
    .responseImage { ... }

或者简单地说:

let url = URL(string: urlString)!
Alamofire.request(url)
    .responseImage { ... }

或者,完全绕过URL

Alamofire.request(urlString)
    .responseImage { ... }

无关,Alamofire不需要DispatchQueue.main.async。与URLSession不同,Alamofire已在主队列上运行其完成处理程序(除非您向queue方法提供request参数)。因此,取消DispatchQueue.main.async来电。