尽管Alamofire的github文档已经做了很详细的说明,我还是想重新梳理一遍它的各种用法,以及这些方法的一些设计思想 前言 因为之前写过一个AFNetworking的源码解读,所以就已经比较了解iOS平台的网络框架是怎么一回事了.Alamofire和AFNetworking有很多相同的地方,然而,这些相同点在swift和oc两种不同语言的实现情况下,给人的感觉是完全不同的. 我们看源码的目的有两个:一是了解代码的实现原理,另一个是学习swift的一些高级用法. 下边的这个表格就是我打算解读…
本篇主要讲解Alamofire中错误的处理机制 前言 在开发中,往往最容易被忽略的内容就是对错误的处理.有经验的开发者,能够对自己写的每行代码负责,而且非常清楚自己写的代码在什么时候会出现异常,这样就能提前做好错误处理. Alamofire的错误封装很经典,是使用swift中enum的一个典型案例.读完这篇文章,一定能让大家对swift的枚举有一个更深的理解,同时增加一些枚举的高级使用技巧. 那么有一个很重要的问题,我们应该在什么情况下考虑使用枚举呢?只要结果可能是有限的集合的情况下,我们就尽量…
本篇讲解参数编码的内容 前言 我们在开发中发的每一个请求都是通过URLRequest来进行封装的,可以通过一个URL生成URLRequest.那么如果我有一个参数字典,这个参数字典又是如何从客户端传递到服务器的呢? Alamofire中是这样使用的: URLEncoding 和URL相关的编码,有两种编码方式: 直接拼接到URL中 通过request的httpBody传值 JSONEncoding 把参数字典编码成JSONData后赋值给request的httpBody PropertyList…
本篇讲解swift中通知的用法 前言 通知作为传递事件和数据的载体,在使用中是不受限制的.由于忘记移除某个通知的监听,会造成很多潜在的问题,这些问题在测试中是很难被发现的.但这不是我们这篇文章探讨的主题. 我曾见过,有的团队为了管理通知,开发了一个类似于NotificationManager的类,所有通知的添加移除都通过这个类进行管理,通过打印通知数组就能很清楚的看到添加了哪些通知,以及这些通知被绑定在那些对象之上,这是一个很好地思路. 发通知 swift中发通知的函数原型是这样的: open…
本篇讲解Result的封装 前言 有时候,我们会根据现实中的事物来对程序中的某个业务关系进行抽象,这句话很难理解.在Alamofire中,使用Response来描述请求后的结果.我们都知道Alamofire返回的数据可以经过特殊的处理,比如说序列化,那么我们应该如何在Response中获取到这些类型不同的数据呢? 假如说序列化后的数据是data,最直接的想法就是把data设置为Any类型,在实际用到的时候在进行判断,这也是最普通的一种开发思维.现在我们就要打破这种思维.我们需要封装一个对象,这个…
本篇介绍Task代理(TaskDelegate.swift) 前言 我相信可能有80%的同学使用AFNetworking或者Alamofire处理网络事件,并且这两个框架都提供了丰富的功能,我也相信很多人都做了二次封装,但事实上,这个二次封装却又异常简单或者是简陋.这篇文章的内容是Task代理,是一篇很独立的文章,大家可以通过这篇文章了解iOS中网络开发是怎么一回事. 那么一条最普通的网络请求,究竟是怎样的一个过程?首先我们根据一个URL和若干个参数生成Request,然后根据Request生成…
Alamofire源码解读系列(七)之网络监控(NetworkReachabilityManager) 本篇主要讲解iOS开发中的网络监控 前言 在开发中,有时候我们需要获取这些信息: 手机是否联网 当前网络是WiFi还是蜂窝 那么我总结一下具体的使用场景有哪些?肯定有遗漏: 聊天列表,需要实时监控当前的网络是不是可达的,如果不可达,则出现不能联网的提示 在线视屏播放,需要判断当前的网络状态,如果不是WiFi,应该给出流量播放的提示 对于比较重要的网络请求,在请求出错的情况下,判断网路状态,找出…
本篇主要讲解Alamofire中安全验证代码 前言 作为开发人员,理解HTTPS的原理和应用算是一项基本技能.HTTPS目前来说是非常安全的,但仍然有大量的公司还在使用HTTP.其实HTTPS也并不是很贵啊. 在网上可以找到大把的介绍HTTTPS的文章,在阅读ServerTrustPolicy.swfit代码前,我们先简单的讲一下HTTPS请求的过程: 上边的图片已经标出了步骤,我们逐步的来分析: HTTPS请求以https开头,我们首先向服务器发送一条请求. 服务器需要一个证书,这个证书可以从…
本篇主要带来Alamofire中Response的解读 前言 在每篇文章的前言部分,我都会把我认为的本篇最重要的内容提前讲一下.我更想同大家分享这些顶级框架在设计和编码层次究竟有哪些过人的地方?当然,这些理解也都是基于我自己的理解.难免具有局限性. 当我们设计完一个Request的时候,我们肯定要处理服务器返回的响应数据.在Alamofire源码解读系列(一)之概述和使用中,我们已经讲过,Alamofire中把Request分为了4类: DataRequest DownloadRequest U…
本篇主要讲解Alamofire中如何把服务器返回的数据序列化 前言 和前边的文章不同, 在这一篇中,我想从程序的设计层次上解读ResponseSerialization这个文件.更直观的去探讨该功能是如何一步一步实现的.当然,有一个不好的地方,跟数学问题一样,我们事先知道了结果,因此这是一个已知结果推到过程的问题. 在之前Alamofire的源码解读文章中,我们已经知道了:对于响应感兴趣的Request类型是DataRequest和DownloadRequest.我们下边所有的设计都是针对这两个…