源码阅读-SwiftyJSON
最后更新:2018-03-19
一、说在前面的话:
SwiftyJSON 作为一个 swift 的解析库, 在 Swift4 之前备受欢迎, 目前(2018.3.19) 已经有 1.6w+ Star 以及 2800+ fork.
Swift4中, Apple 实现了 Codable 协议,使得JSON 转模型变得高效, SwiftJSON等一系列三方库会逐渐变为历史。 但一份优秀的代码包含着设计者的思想,非常值得我们去学习。
二、开始阅读源码
SwiftJSON文件并不多, 总共也就一千多行的代码. 但是其中的内容迭代,从2014.9.29日维护至今, 对内容各种优化调整。
JSON的数据类型
JSON官方定义的数据格式有: 字典(Dict)、数组(Array)、字符串(String)、数字(Number)、布尔值(true & false)、以及 null, 其中JSON是以数组或者字典开头的,其中字典的key为字符串(String)
例如:
{
"name": "BeJson",
"url": "http://www.bejson.com",
"page": 88,
"nullValue": null,
"isNonProfit": true,
"address": {
"street": "科技园路.",
"city": "江苏苏州",
"country": "中国"
}
}
处理JSON数据,每个人都有自己的方法。在曾经开发过程中, 遇到过下面的集中问题:
- 布尔值问题. 例如表示一个人是否成年。 经常采用的是利用 0 和1 表示 true & false;
- value解析的问题, 尤其是 null 值解析;
针对第一个问题,各有各的道理, 布尔值(true&false)意思表达的很明确, 没有第三种情况。 而整形就可以由你随便使用(有时候就成了"滥用").
null值解析, null值应该根据实际需要解析成不同的类型。 字符串可以解析成 "null" 或者 “”, 这里应该提供对应的方式有使用者去处理。很遗憾的是, 作者在处理这一块的时候, 就处理为 “null”
SwiftyJSONError
SwiftJSONError 可以看到, 以前一直是使用常量来表示, 在 2017.5 的时候, 源代码作者将其设置为遵循 Swift.Error的类型, 考虑到NSError, 遵循 CustomNSError 协议并实现响应的代码.
源码阅读-SwiftyJSON的更多相关文章
- 【原】FMDB源码阅读(三)
[原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...
- 【原】FMDB源码阅读(二)
[原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...
- 【原】FMDB源码阅读(一)
[原]FMDB源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 说实话,之前的SDWebImage和AFNetworking这两个组件我还是使用过的,但是对于 ...
- 【原】AFNetworking源码阅读(六)
[原]AFNetworking源码阅读(六) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这一篇的想讲的,一个就是分析一下AFSecurityPolicy文件,看看AF ...
- 【原】AFNetworking源码阅读(五)
[原]AFNetworking源码阅读(五) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇中提及到了Multipart Request的构建方法- [AFHTTP ...
- 【原】AFNetworking源码阅读(四)
[原]AFNetworking源码阅读(四) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇还遗留了很多问题,包括AFURLSessionManagerTaskDe ...
- 【原】AFNetworking源码阅读(三)
[原]AFNetworking源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇的话,主要是讲了如何通过构建一个request来生成一个data tas ...
- 【原】AFNetworking源码阅读(二)
[原]AFNetworking源码阅读(二) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇中我们在iOS Example代码中提到了AFHTTPSessionMa ...
- 【原】AFNetworking源码阅读(一)
[原]AFNetworking源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 AFNetworking版本:3.0.4 由于我平常并没有经常使用AFNetw ...
随机推荐
- java 内容仓储
什么是JAVA内容仓库(Java Content Repository)(2) 转载 自:http://blog.csdn.net/vltic/article/details/7249395 内容仓库 ...
- HDU 1257 最少拦截系统 最长递增子序列
HDU 1257 最少拦截系统 最长递增子序列 题意 这个题的意思是说给你\(n\)个数,让你找到他最长的并且递增的子序列\((LIS)\).这里和最长公共子序列一样\((LCS)\)一样,子序列只要 ...
- Spring Data Elasticsearch基本使用
目录 1. 创建工程 2. 配置application.yaml文件 3. 实体类及注解 4. 测试创建索引 5. 增删改操作 5.1增加 5.2 修改(id存在就是修改,否则就是插入) 5.3 批量 ...
- redis 命令都在这了
DEL key [key ...]删除指定的key(一个或多个) DUMP key导出key的值 EXISTS key [key ...]查询一个key是否存在 EXPIRE key seconds设 ...
- 096、运行第一个Service (Swarm03)
参考https://www.cnblogs.com/CloudMan6/p/7874609.html 上一节我们部署好了 Swarm 集群,下面部署一个运行httpd镜像的service进行演示 ...
- django 实现 Mock Server
大佬 flask 实现mock server地址:https://github.com/yinquanwang/MockServer 参考使用django实现了一下,并已部署到EasyTest测试平台 ...
- Coursera机器学习笔记(一) - 监督学习vs无监督学习
转载 http://daniellaah.github.io/2016/Machine-Learning-Andrew-Ng-My-Notes-Week-1-Introduction.html 一. ...
- 2019-11-29-git-需要知道的1000个问题
title author date CreateTime categories git 需要知道的1000个问题 lindexi 2019-11-29 8:36:7 +0800 2018-2-13 1 ...
- 五、vue中export和export default的使用
一.export的使用 比喻index.js要使用test.js中的数据,首先在test.js文件中进行导出操作 代码如下: export function list() { alert(" ...
- excle 文件的导入和导出
//excle 文件导出 public function excel(){ try{ include(BASE_PATH."Excel/PHPExcel.php"); // ech ...