Ios Swift 3.0迁移后的Alamofire错误:“;无法转换类型为';(URL,HTTPURLResponse)>;(网址)及"x27 ;;到预期的参数类型';参数'&引用;?

Ios Swift 3.0迁移后的Alamofire错误:“;无法转换类型为';(URL,HTTPURLResponse)>;(网址)及"x27 ;;到预期的参数类型';参数'&引用;?,ios,swift3,Ios,Swift3,我目前正在将我的代码库更新为Swift 3.0,我正在使用Alamofire。我必须将Alamofire更新为4.0()。我有一种下载媒体(视频)的方法,在迁移之前它工作得非常好。使用Xcode的迁移工具后,我出现了以下错误:“无法将类型为“(URL,HTTPURLResponse)->(URL)”的值转换为预期的参数类型“Parameters”,即[String:Any]。这个Parameters对象到底是什么?为什么它会抛出错误?迁移前的代码和现在的代码之间唯一的区别是,现在NSURL被UR

我目前正在将我的代码库更新为Swift 3.0,我正在使用Alamofire。我必须将Alamofire更新为4.0()。我有一种下载媒体(视频)的方法,在迁移之前它工作得非常好。使用Xcode的迁移工具后,我出现了以下错误:“无法将类型为“(URL,HTTPURLResponse)->(URL)”的值转换为预期的参数类型“Parameters”,即[String:Any]。这个Parameters对象到底是什么?为什么它会抛出错误?迁移前的代码和现在的代码之间唯一的区别是,现在NSURL被URL替换。任何帮助都会很好,因为我在过去的3个小时里一直在做这件事

let mediaSourceURI: String = media.sourceURI
var filePath: URL?
let destination: (URL, HTTPURLResponse) -> (URL) = {
    (temporaryURL, response) in

    if let directoryURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first, let suggestedFilename = response.suggestedFilename {
        filePath = directoryURL.appendingPathComponent("\(suggestedFilename)")
        return filePath!
    }
    return temporaryURL
}

//ERROR BELOW:  "destination" is highlighted, and says "Cannot convert value of type '(URL, HTTPURLResponse)-> (URL)' to expected argument type 'Parameters?"
RequestManager.mediaDownloadAlamofireManager.download(mediaSourceURI, method: .get, parameters: destination).response {
    (request, response, data, error) -> Void in

    self.completeOperation()

}
这里有一个链接我一直在尝试用作参考:,特别是在参数编码协议部分

以下是Alamofire中更新的下载方法的语法:

//mediaDownloadAlamofireManager代码,没有错误:

static let mediaDownloadAlamofireManager: SessionManager = {
    let configuration = URLSessionConfiguration.default
    configuration.httpAdditionalHeaders = SessionManager.defaultHTTPHeaders
    let serverTrustPolicies: [String: ServerTrustPolicy] = [baseURL : .disableEvaluation]
    let manager = SessionManager(
        configuration: configuration,
        serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies)
    )
    return manager
}()
1.简单打字 RequestManager.mediaDownloadAlamofireManager.download(mediaSourceURI, 方法:。获取,参数(目标)

RequestManager.mediaDownloadAlamofireManager.download(mediaSourceURI, 方法:.get,目的地:目的地)


2.更改DownloadFileDestination类型 Alamofire 4.0 of
DownloadFileDestination
–您调用的参数destination。它从:

(URL,HTTPURLResponse)->(URL)

(URL,HTTPURLResponse)->(URL,DownloadRequest.DownloadOptions)

因此,您还需要将方法更改为以下内容:

let destination: (URL, HTTPURLResponse) -> (URL, DownloadRequest.DownloadOptions) = {
    (temporaryURL, response) in
        
    if let directoryURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first, let suggestedFilename = response.suggestedFilename {
        filePath = directoryURL.appendingPathComponent("\(suggestedFilename)")
        return (filePath!, [.removePreviousFile, .createIntermediateDirectories])
    }
    return (temporaryURL, [.removePreviousFile, .createIntermediateDirectories])
}

请注意,您不再只是返回url,还具有。只需指定所需的选项,例如removePreviousFile或/和CreateMediateDirectory。它们现在作为返回。

您引用的参数需要类型
[String:Any]
,但您的是
(url,HTTPURLResponse)->(url)
。但是,您的RequestManager是什么?您定义了吗?RequestManager是“mediaDownloadAlamofireManager”,一个会话管理器,在另一个文件中全局定义。是的,我使用的下载方法很可能已经过时,我已经尝试了您提到的方法,但我仍然没有创建“参数”“对。我不太确定如何将我的目的地转换为[String:Any]也许这会有所帮助:一个参数的示例是
let examplepartameters=[“search”:“bob”]
,然后在Alamofire中的调用将是:
Alamofire.download(mediaSourceURI,方法:.get,参数:Examplepartameters)
或者在您的情况下
RequestManager.mediaDownloadAlamofireManager.download(mediaSourceURI,方法:.get,参数:exampleParameters)
啊,我知道问题所在。只需使用初始代码并在
.download(mediaSourceURI,方法:.get,参数:destination)
中替换带有destination的单词parameter,因此看起来像
.download(mediaSourceURI,方法:.get,目标:destination)
。必须是我刚刚尝试过的输入错误,它仍然生成错误:“调用中的参数标签不正确(have):方法:目标:',应为:方法:参数:')。谢谢你的帮助。方法
mediaDownloadAlamofireManager
是什么样子的?我想你定义它是为了与Alamofire接口?我想你也需要更新它。我已经编辑了我的问题和mediaDownloadAlamofireManagercode@JoshO“Connor我注意到他们更改了DownloadFileDestination类型请查看我的最新答案。