Swift 2迁移至Swift 3时Alamofire续传代码参数标签不匹配报错
Swift3迁移中Alamofire续传代码的错误修复
嘿,我来帮你搞定这个Alamofire续传的编译错误!这个问题其实是Swift3和对应版本Alamofire的API变化导致的,我给你拆解下问题点并提供修复方案:
错误原因拆解
- 基础类型更新:Swift3把
NSData统一替换成了原生Swift类型Data,原代码的类型声明不符合新规范 - API命名规范调整:Alamofire跟随Swift3的风格,把枚举值
.ResumeData改成了小写开头的.resumeData,同时下载请求的相关类型也做了拆分 - 方法重载与参数标签变化:Alamofire的
download方法在Swift3里的参数标签和重载形式发生了改变,原调用方式匹配不到可用的方法签名
修正后的代码
public func download(resumeData: Data, destination: @escaping DownloadRequest.DownloadFileDestination) -> DownloadRequest { return download(resumeData, to: destination) }
关键改动说明
NSData→Data:这是Swift3的基础类型统一要求,所有原Foundation的NS前缀值类型都替换成了原生Swift类型Request.DownloadFileDestination→DownloadRequest.DownloadFileDestination:Alamofire在Swift3中把下载相关的请求类型单独拆分到DownloadRequest中,不再作为Request的关联类型- 添加
@escaping关键字:Swift3开始,闭包作为函数参数默认是non-escaping的,而这里的destination闭包会被异步调用,必须显式加上@escaping标记 - 参数标签与调用方式调整:原方法的
destination:参数标签在Swift3的Alamofire里变成了to:,同时直接传入resumeData即可,不需要再用枚举包裹(Alamofire提供了直接接受Data类型的重载)
这样修改后,代码就能符合Swift3和对应版本Alamofire的API规范,编译错误也就解决啦~
内容的提问来源于stack exchange,提问作者Puja Jadhav
相关产品推荐
相关产品推荐

