摘要

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 的设置都是无效的。

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

题外话

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

Alamofire-5.0.0 以上报错的更多相关文章

  1. Go丨语言对数据库操作报错 panic: dial tcp 127.0.0.1:3306: connectex: No connection could be made because the target machine actively refused it.

    panic: dial tcp 127.0.0.1:3306: connectex: No connection could be made because the target machine ac ...

  2. 解决nginx报错:nginx: [emerg] bind() to 0.0.0.0:8088 failed (13: Permission denied)

    报错描述: nginx: [emerg] bind() to 0.0.0.0:8088 failed (13: Permission denied) 通过ansible远程给主机更换端口并重新启动ng ...

  3. Apache报错信息之通常每个套接字地址(协议/网络地址/端口)只允许使用一次(could not bind to address 0.0.0.0:80)

    我们常常在执行 httpd –k restart 重启Apache时报错提示: (OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次.  : AH00072: make_soc ...

  4. 解决zookeeper报错[NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@362] - Exception causing close

    zookeeper.out报错: 2016-12-10 18:05:46,958 [myid:3] - WARN  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181 ...

  5. 如果觉得配置文件没有错,但web-dev-server总是报错,可以在hosts文件里加一行127.0.0.1 localhost

    如果觉得配置文件没有错,但web-dev-server总是报错,可以在hosts文件里加一行127.0.0.1 localhost

  6. selenium在Eclipse中打开fireFox浏览器是报报错connect to host 127.0.0.1 on port 7055

    1.相信很多同学刚接触selenium时,在Eclipse中打开fireFox浏览器是报报错: org.openqa.selenium.firefox.NotConnectedException: U ...

  7. Microsoft.ReportViewer.WebForms, Version=10.0.0.0的报错问题,解决方案

    未能加载文件或程序集,或者web.config报错! 已解决:直接找到(默认在 路径/Microsoft Visual Studio 8/ReportViewer).把里面的3个DLL传上去就OK了! ...

  8. android sdk启动报错error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037:

    android sdk启动报错error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037: 问题原因: ...

  9. 服务器部署_nginx报错: [warn] conflicting server name "www.test.com" on 0.0.0.0:80, ignored

    今天修改nginx配置文件nginx.conf之后,启动nginx就会报错.经仔细检查是重复配置了 server元素导致, 当nginx检测到重复的 server_name item.test.com ...

随机推荐

  1. 关于Thread的interrupt

    关于Thread的interrupt Thread的interrupt方法会引发线程中断. 主要有以下几个作用: 如Object的wait方法,Thread的sleep等等这些能够抛出Interrup ...

  2. VM的三种连接方式(转载)

    概述: VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模 ...

  3. 面霸篇:Java 集合容器大满贯(卷二)

    面霸篇,从面试角度作为切入点提升大家的 Java 内功,所谓根基不牢,地动山摇. 码哥在 <Redis 系列>的开篇 Redis 为什么这么快中说过:学习一个技术,通常只接触了零散的技术点 ...

  4. [cf1479E]School Clubs

    对于当前班级状态$S$,定义一个函数$\varphi(S)$,要求其满足: 令结束状态为$S_{end}$,对于任意$S\ne S_{end}$,若其下一个状态为$S'$,则$E(\varphi(S) ...

  5. [cf1285F]Classical

    先枚举$d=\gcd$,然后暴力枚举所有$d$的倍数,相当于求出若干个数中最大的互素对 假设选出的数依从大到小排序后为$a_{i}$,令$g_{i}=\min_{(a_{i},a_{j})=1}j$, ...

  6. [atARC087F]Squirrel Migration

    对这棵树重心情况分类讨论: 1.若这棵树存在两个重心,分别记作$x$和$y$,如果将$(x,y)$断开,两棵子树大小都相同(都为$\frac{n}{2}$),此时$p_{i}$与$i$必然不同属于一个 ...

  7. 面向对象中static的理解(2) (单例模式)

    作用:只产生一个对象 1 class Yoshi { 2 public: 3 //外界只能通过这种方式调用这一个对象,返回必须是引用 4 static Yoshi& getInstance() ...

  8. 【2020-8-21】【数字游戏】【启发式搜索IDA*】

    有这么一个游戏: 写出一个1-N的排列a[i],然后每次将相邻两个数相加,构成新的序列,再对新序列进行这样的操作,显然每次构成的序列都比上一次的序列长度少1,直到只剩下一个数字位置.下面是一个例子: ...

  9. Codeforces 547E - Mike and Friends(AC 自动机+树状数组)

    题面传送门 好久每做过 AC 自动机的题了--做几个题回忆一下罢 AC 自动机能够解决多串匹配问题,注意是匹配,碰到前后缀的问题那多半不在 AC 自动机能解决的范围内. 在初学 AC 自动机的时候相信 ...

  10. 非标准的xml解析器的C++实现:一、思考基本数据结构的设计

    前言: 我在C++项目中使用xml作为本地简易数据管理,到目前为止有5年时间了,从最初的全文搜索标签首尾,直到目前项目中实际运用的类库细致到已经基本符合w3c标准,我一共写过3次解析器,我自己并没有多 ...