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 ...
随机推荐
- 【CVE-2020-1948】Apache Dubbo Provider反序列化漏洞复现
一.实验简介 实验所属系列: 系统安全 实验对象:本科/专科信息安全专业 相关课程及专业: 计算机网络 实验时数(学分):2 学时 实验类别: 实践实验类 二.实验目的 Apache Dubbo是一款 ...
- Android ANR从原理到日志分析,记下来就够了
站在巨人的肩膀上可以看的更远 做一个优秀的搬运工 Android 彻底理解安卓应用无响应机制 Android ANR日志分析全面解析 优秀的文章不可独享,要扩散,要做好笔记,哈 <沁园春长沙&g ...
- 【JAVA】编程(4)---摇色子
作业要求: 利用" Math.random ( ) "生成随机数的方法来模拟同时摇三个色子获得的点数:点数的多少不同,也会导致不同的输出结果:可适当对程序增添一些更有趣的功能: ...
- Part 32 AngularJS controller as syntax
So far in this video series we have been using $scope to expose the members from the controller to t ...
- Part 29 AngularJS intellisense in visual studio
In the previous videos if you have noticed as we were typing the angular code in Script.js file we w ...
- [luogu5423]Valleys
先考虑不要求有洞,那么可以将所有权值排序,然后不断插入,那么一个连通块就是一个答案,加上连通块大小即可考虑并查集如何判断是否有洞,可以发现对于任意一个无洞的直角多边形,都有$90度内角-90度外角=4 ...
- Spring Cloud Gateway限流实战
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Apache ShardingSphere 5.0.0 内核优化及升级指南
经过近两年时间的优化和打磨,Apache ShardingSphere 5.0.0 GA 版终于在本月正式发布,相比于 4.1.1 GA 版,5.0.0 GA 版在内核层面进行了大量的优化.首先,基于 ...
- Android系统编程入门系列之硬件交互——多媒体摄像头
多媒体系列硬件 多媒体包括图片.动画.音频.视频,这些多媒体素材的采集(输入)主要依靠摄像头和麦克风等硬件设备转化为基础数据,而他们的播放渲染(输出),则需要依靠具有相关功能的编解码软件.当然随着硬件 ...
- 关于AnnotationHub的一些应用
AnnotationHub是一个包含大量注释信息的数据库,里面有很多物种,以及来源于很多数据库的注释信息. 1,安装这个包 source("https://bioconductor.org/ ...