上一篇中《从YYModel源码中可以学到什么:后篇》中主要学习了YYModel的源码结构,只是分享了YYModel整体结构。承接上篇,本文将解读YYModel如何进行JSON模型转换的,接下来一起揭开YYModel的神秘面纱吧!
目录
JSON -> Model
Model -> JSON
JSON转Model
首先来看JSON是如何转为Model。查看YYModel的接口,提供了一个方法:
1+ (instancetype)yy_modelWithJSON:(id)json;
注意json为id类型,接收三种不同类型参数NSString,NSData,NSDictionay。下面是内部实现:
1234+ (instancetype)yy_modelWithJSON:(id)json { NSDictionary *dic = [self _yy_dictionaryWithJSON:json]; return [self yy_modelWithDictionary:dic];}
方法中调用了一个私有方法_yy_dictionar ...
YYModel是一个高性能模型库。为了了解底层实现,笔者初步打算用两篇文章学习YYModel源码。本文是第一篇文章,初步分析YYModel整体架构及为使用者暴露出来的接口,相当于一个使用教程。第二篇文章从YYModel源码中可以学到什么:前篇一步步分析YYModel是如何转换成Model的。 接下来我们开始吧!
YYModel一个高性能模型框架。
作者在Github上给出的性能对比图(iphone 6 y:时间)
YYModel:具体以下特点:高性能、自动类型转换、类型安全、非侵入性、轻量等。
关于如何使用YYModel查看文档和示例【传送门】。
本文主要任务,分析YYModel的整体架构,实现思路,涉及到的知识点。
版本:1.0.4
文件结构
YYModel,只有5个文件。接下我们会具体看这五个文件都做了什么工作。
YYModel.h头文件,通过#import该文件使用库。
YYClassInfo.h 根据名字应该能猜出,关于Class信息的文件。
NSObject + YYModel.h 这个NSObject的一个Category。还定义了一些内部类。
YYModel ...
前言本文整理开发中使用的库,和一些个人喜欢的库,方便以后查阅。
下面这些库是当前Swift项目中用的库。
12345678pod 'SnapKit' # Swift布局库pod 'Alamofire' # Swift网络库pod 'SwiftyJSON' # JSON解析库pod 'Kingfisher' # 图片加载SDWebImagepod 'SwifterSwift' # Extension库pod 'SVProgressHUD' # 进度pod 'Toast-Swift' # Toast扩展包
其他Gemini 2k +
Gemini是用Swift编写的基于滚动的iOS动画框架。
IBAnimatable 6.6k+
使用IBAnimatable为Interface Store Builder中的App Store应用程序设计和原型化自定义UI,交互,导航,转换和动画。
Spring 11k+
基于Swift的iOS动画库
...
学习手记,每天进步一点!
前言本章学习图层旋转,缩放或者移动的CGAffineTransform,以及可以将扁平物体转换成三维空间对象CATransform3D。
仿射变换CGAffineTransform是一个可以和二维空间向量做乘法的3*2的矩阵。
例子:创建CGAffineTransform
12345678910111213 /// 创建AffineTransform func affineTransform() { //旋转45° let transform = CGAffineTransform(rotationAngle: CGFloat.pi * 0.25) // 缩放// let transformScale = CGAffineTransform(scaleX: 1, y: 1.5) // 移动// let transformX = CGAffineTransform(translationX: 100, y: 200) let lay ...
学习手记,每天进步一点!
CALayer相关属性contentsCALayer有一个属性contents,这个属性是id类型,理论上可以赋任何值,实际上需要CGImage类型。可以使用contents属性在CALayer上显示图片,而不使用UIImageView。
contentGravity这个属性类似于UIImageView的contentMode属性,解决内容在图层的边界中怎么对其。不同点是contentGravity是可选的字符串常量,而contentMode对应的值是枚举类型。
kCAGravityCenter
kCAGravityTop
kCAGravityBottom
kCAGravityLeft
kCAGravityRight
kCAGravityTopLeft
kCAGravityTopRight
kCAGravityBottomLeft
kCAGravityBottomRight
kCAGravityResize
kCAGravityResizeAspect
kCAGravityResizeAspectFill
contentsScalec ...
1. Alamofire结构Alamofire全部实现共有17个文件组成,如下:
1234567891011121314151617181920212223242526--------接口----------Alamofire.swift // api 声明--------请求----------Request.swift // 请求类,用于构建请求ParameterEncoding.swift // 参数编码MultipartFormData.swift // 自定义表单类ServerTrustPolicy.swift // 服务器验证--------响应-----------Response.swift // 相应类,用于构建响应ResponseSerialization.swift // 响应数据序列化Validation.swift // 响应数据验证Result.swift // 请求结果表示AFError.swift // 错误类型--------底层-----------SessionManager.swift // 请求session的管理类,底层使用NSURLS ...
2015WWDC最近在恶补iOS网络相关的知识,所以从WWDC入手,本文是WWDC2015网络部分讲座,学习笔记方便日后复习,后续内容会陆续以笔记的形式发布。欢迎大家一起学习😆!
网络和URL会话(Networking with NSURLSession)
主要内容
网络传输安全问题
URLSession添加了哪些新特性
URLSession API变化
视频地址: Networking with NSURLSession
1 网络传输安全问题1.1 URL会话和HTTP协议的背景URLSession
URLSession是一个网络API,主要用于从网站下载HTTP内容。
大量的委托方法(Delegate),可以用来处理认证或者其他重要的事情
另外,可以在没有后台下载API的情况下做网络层任务
HTTP/HTTPS
HTTP使用明码(cleartext)进行数据传输,存在安全问题。HTTPS解决了HTTP的安全问题,HTTPS的本质是HTTP的上一层协议,属于传输层安全协议,传输层安全协议会通过公钥密码学方式进行一个多点的信号交换之后,创建一个安全的连接。
所 ...
本文上上一篇文章的补充内容。
__slots__魔法Python中,每个类的实力属性。默认情况下Python用一个字典来保存一个对象。这非常有用,允许我们在运行时去设置任意的新属性。
但是,有时存在一个问题,比如已知的属性的类来说,字典会浪费很多内存,当类很多时将大量消耗内存。
🌰:
1234567class Myclass(object): __slots__ = ['name', 'identifier'] def __init__(self, name, identifier): self.name = name self.identifier = identifier self.set_up() #...
使用__slots__减少内存消耗。
容器(collections)Python附带一个模块,它包含许多容器数据类型。
例如:
defaultdict
counter
deque
namedtuple
enum.Enum(Python3.4以上)
defaultdictdefaultdict与dict类型不同 ...
接下来的文章学习Python的高级内容,这部分和之前相比有一定的难度,需要认真学习。加油吧,少年!
两个魔法变量在Python中有两个变量参数容易困扰我们。它们是*args和**kwargs。接下来我们看看究竟是什么意思!
*args*args和**kwargs主要用于函数定义。可以将不定数量的参数传递给函数。*args是用来发送一个非键值对的可变数量的参数列表给函数。
举个🌰:
1234567def test_var_args(f_arg, *argv): print('first normal arg: ', f_arg) for arg in argv: print('anothor arg throgh * argv:', arg)test_var_args('yasoob', 'python', 'eggs', 'test')
输出结果:
1234first normal arg: yasoobanothor arg th ...
编程语言
未读
标准库简介(更新中)操作系统接口
os模块提供很多与操作系统交互的函数:
12345678910111213141516# 导入OS模块>>> import os# 获取当前路径>>> os.getcwd()'/Users/lqq/Desktop/Python3/Exercise1'# 修改当前路径>>> os.chdir('/Users/lqq/Desktop/Python3')>>> os.getcwd()'/Users/lqq/Desktop/Python3'# 创建today文件夹>>> os.system('mkdir today')0
内置的dir()和help()帮助使用模块。
针对日常的文件和目录管理,shutil模块提供了一个易于使用的高级接口,请查阅库文档。
文件通配符
glob模块提供了一个函数用于从目录通配符搜索中生成文件列表:
12>>> import glob& ...