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

因为我之前设置的 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 以上报错的更多相关文章
- 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 ...
- 解决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 ...
- Apache报错信息之通常每个套接字地址(协议/网络地址/端口)只允许使用一次(could not bind to address 0.0.0.0:80)
我们常常在执行 httpd –k restart 重启Apache时报错提示: (OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次. : AH00072: make_soc ...
- 解决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 ...
- 如果觉得配置文件没有错,但web-dev-server总是报错,可以在hosts文件里加一行127.0.0.1 localhost
如果觉得配置文件没有错,但web-dev-server总是报错,可以在hosts文件里加一行127.0.0.1 localhost
- selenium在Eclipse中打开fireFox浏览器是报报错connect to host 127.0.0.1 on port 7055
1.相信很多同学刚接触selenium时,在Eclipse中打开fireFox浏览器是报报错: org.openqa.selenium.firefox.NotConnectedException: U ...
- Microsoft.ReportViewer.WebForms, Version=10.0.0.0的报错问题,解决方案
未能加载文件或程序集,或者web.config报错! 已解决:直接找到(默认在 路径/Microsoft Visual Studio 8/ReportViewer).把里面的3个DLL传上去就OK了! ...
- 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: 问题原因: ...
- 服务器部署_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 ...
随机推荐
- Android ANR从原理到日志分析,记下来就够了
站在巨人的肩膀上可以看的更远 做一个优秀的搬运工 Android 彻底理解安卓应用无响应机制 Android ANR日志分析全面解析 优秀的文章不可独享,要扩散,要做好笔记,哈 <沁园春长沙&g ...
- SVN错误:Attempted to lock an already-locked dir svn: Working copy locked
VN错误:Attempted to lock an already-locked dir update D:/workspace20/SC_200/metadata -r 3398 --force ...
- 菜鸡的Java笔记 第三十四 Annotation
Annotation 多例模式特点: 1. 多例类可以有多个实例 2. 多例类必须自己创建自己的实例,并管理自己的实例,和向外界提供自己的实例 ...
- 菜鸡的Java笔记 第二十三 - java 抽象类的概念
abstractClass 抽象类的概念 1.抽象类的基本定义 2.抽象类的使用原则 不会抽象类与接口,java = 没学 ...
- difflib模块详解
1.两个字符串对比 import difflib text1=""" test1 #定义字符串 hellow my name is machanwei! difflib ...
- 【BZOJ 4668 冷战】
题目: [BZOJ 4668 冷战] 思路: 因为考虑强制在线,我们是肯定要维护形状的 我们发现如果\((u,v)\)这条边如果\(u,v\)已经连上,那么对于最终答案这条边是没有贡献的 所以我们发现 ...
- Codeforces 193E - Fibonacci Number(打表找规律+乱搞)
Codeforces 题目传送门 & 洛谷题目传送门 蠢蠢的我竟然第一眼想套通项公式?然鹅显然 \(5\) 在 \(\bmod 10^{13}\) 意义下并没有二次剩余--我真是活回去了... ...
- P6973 [NEERC2016]List of Primes
题目传送门. 题意简述:将质数集合的所有子集按照子集和为第一关键字,字典序为第二关键字从小到大排序,求最终形成的字符串的第 \(l\sim r\) 个字符. 在 cnblogs 内查看. 又是一道妙妙 ...
- expr计算字符串长度
命令:expr length "quanzhiqinag" #!/bin/bash for N in quan zhi qiang do if [ `expr length $N ...
- 【机器学习与R语言】1-机器学习简介
目录 1.基本概念 2.选择机器学习算法 3.使用R进行机器学习 1.基本概念 机器学习:发明算法将数据转化为智能行为 数据挖掘 VS 机器学习:前者侧重寻找有价值的信息,后者侧重执行已知的任务.后者 ...