摘要

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. c++学习笔记6(结构化程序设计的不足)

    结构化程序设计 c语言使用结构化程序设计: 程序=数据结构+算法 程序有全局变量以及众多相互调用的函数组成 算法以函数的形式实现,用于对数据结构进行操作 结构化程序设计不足 软件业的目标是更快,更正确 ...

  2. 2014年3月5日C#训练

    using System; class Program { static void Main() { Console.WriteLine("请输入两个整数:"); int a = ...

  3. 力扣 - 剑指 Offer 27. 二叉树的镜像

    题目 剑指 Offer 27. 二叉树的镜像 思路1(递归) 我们可以使用深度优先搜索,先递归到链表的末尾,然后从末尾开始两两交换.就相当于后续遍历而已 记得要先保存下来node.right节点,因为 ...

  4. 【Linux】(1)安装

    VMware虚拟机安装Linux,IP地址显示为127.0.0.1的解决方案 ① 打开该虚拟机,点击导航栏"虚拟机(M)",选择"设置(S)..." ② 将&q ...

  5. GPG 使用指南

    加密与签名 在传输信息时,会面临两个典型的问题: 如何保证发出的消息,只能被预期的接收人获取? 如何保证收到的消息,确实由预期的发送人发出? 这两个问题不难理解.例如发送的邮件可能会被监听,诈骗分子可 ...

  6. Go IF 条件语句

    条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为 true 来决定是否执行指定语句,并在条件为 false 的情况在执行另外的语句. 以下是在大多数编程语言中发现的典型条件语句的一般形式 ...

  7. Navicat 激活教程2021(Linux)

    Navicat 激活教程2021(Linux) 目录 背景 环境 激活 清理 使用 背景 Navicat 是香港卓软数字科技有限公司生产的一系列 MySQL.MariaDB.MongoDB.Oracl ...

  8. 1D RKDG to shallow water equations

    RKDG to shallow water equations 1.Governing Equations \[\frac{\partial U}{\partial t} + \frac{\parti ...

  9. nginx_location

    Nginx location 配置语法 1. location [ = | ~ | ~* | ^~ ] uri { ... } 2. location @name { ... } location 配 ...

  10. CentOS安装配置Hadoop 1.2.1(伪分布模式)

    CentOS安装配置Hadoop1.2.1 1.下载安装文件 下载2个安装文件 JAVA环境:jdk-6u21-linux-i586.bin Hadoop环境:hadoop-1.2.1.tar.gz ...