zoukankan      html  css  js  c++  java
  • Alamofire5.0.0 以上报错

    摘要

    Alamofire 更新到新版本时,遇到了两个错误❌和一个警告⚠️,所以记录下来它们,以及如何解决它们。给其他出现类似问题的同道一些解决的方向。

    今天新开启一个项目,因为网络请求选择 Alamofire 第三方库处理,所以就在项目中通过 Pod 引入 Alamofire,把上个项目关于 Alamofire 的封装代码给放到这个项目中,问题就这样来了。

    首先遇到的报错提示就是 Module 'Alamofire' has no member named 'request'

    这就非常郁闷了,代码在之前的项目里面是没有这个错误的,但是竟然在新的项目中报错。就对比一下两个项目中的 Alamofire 的版本,发现新项目中的版本是 5.4.3,比之前的项目的 Alamofire 高。

    到了这一步,最直接的解决方法就是在新项目中的 Alamofire 版本设置为之前低于 5.0.0 版本,重新 Pod 一下。问题就解决了。

    但是既然新版本 Alamofire 不支持这样的使用方式,那就用新的方式来调用,也算是学习一下。

    当在新版本 Alamofire 代码中搜索 request ,看到这个方法在 Session 的类中,同时在看 Alamofire.swift 文件的时候,除了表明版本号,还定义了一个 Session 的常量:

    public let AF = Session.default
    

    所以,就用 AF 来替换就解决了。

    // 旧的代码
    Alamofire.request(...)
    
    // 新的代码
    AF.request(...)
    

    之后就有一个关于设置 headers 的警告⚠️,虽然不是报错,但是如果不处理,headers 的设置都是无效的。

    alamofire-image1

    因为我之前设置的 headers 对象是用 NSMutableDictionary 的:

    let headers = NSMutableDictionary(
        dictionary: ["Accept":"application/json",
                     "Content-Type":"application/json"]
    )
    

    看警告里面是需要有 HTTPHeaders 类型的数据,所以就追进去看一下 HTTPHeaders 的结构,发现这里面还有一个 HTTPHeader 类型:

    private var headers: [HTTPHeader] = []
    

    里面还有关于初始化、添加、删除相关的方法,感兴趣的可以追进去看看,这里说明消除警告⚠️的处理。我是这样处理的:

    var headers = HTTPHeaders(
        [HTTPHeader.accept("application/json"),
        HTTPHeader.contentType("application/json")]
    )
    

    如果想要添加一个新的 HTTPHeader 类型数据时候,可以这样处理:

    headers.add(
        HTTPHeader(name: "mw-jwt", value: MyUserDefaults.instance.token)
    )
    

    初始化和添加方法不止这一种,如果感兴趣,可以看一下源码,说不定有不同的感悟。

    如果在请求之后使用 responseJSON 函数将结果转换为 JSON 格式时,就会发现当使用 response.result 数据就会报错 'isSuccess' is inaccessible due to 'internal' protection level 等等一些

    排查之后发现凡是 response.result 的属性变量都无法访问,那么在 response 中有两个属性变量来替换:

    // 正确结果的变量
    public var value: Success? { result.success }
    
    // 错误结果的变量
    public var error: Failure? { result.failure }
    

    就是将 isSuccess 的判断,直接更换为对 error == nil 判断处理。

    到这里,已经解决了老版本更新为新版本 Alamofire 请求代码中的两个错误❌和一个警告⚠️。看后面还会出现什么问题,再给大家说。

    题外话

    时间仓促,说的东西可能不全面,在你查看的过程中遇到什么问题,评论区给我留言,我会尽快回复

  • 相关阅读:
    time 模块学习
    day 14 自定义模块,常用模块 time .datetime ,time 模块
    day 13 课后作业
    day 12 课后作业
    day 11课后作业
    树状数组最值
    hdu 1059 Dividing bitset 多重背包
    XVII Open Cup named after E.V. Pankratiev. XXI Ural Championship
    最长公共子序列板/滚动 N^2
    Uva 10635
  • 原文地址:https://www.cnblogs.com/shsuper/p/15668684.html
Copyright © 2011-2022 走看看