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 请求代码中的两个错误❌和一个警告⚠️。看后面还会出现什么问题,再给大家说。

    题外话

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

  • 相关阅读:
    echarts 变量a、b、c、d的含义
    JS实现字符点点loading效果
    ES6的异步 async promise
    ES6中Promise封装ajax的写法
    ES6 set数据结构举例
    notepad++ 正则替换 字符串开始 字符串结束
    php去除bom
    jquery-ui Datepicker 创建 销毁
    Vue-cli3 WARNING in asset size limit: The following asset(s) exceed the recommended size limit (244 KiB)
    XManager product key
  • 原文地址:https://www.cnblogs.com/shsuper/p/15668684.html
Copyright © 2011-2022 走看看