本文主要是介绍iOS:YYModel,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
iOS:YYModel
github:https://github.com/ibireme/YYModel
做人不能偷太多懒,现在就开始翻翻源码吧。。。顺路复习一个
先留下一点资料看源码时或许会用到:
http://www.jianshu.com/users/aa41dad549af/latest_articles
http://www.cnblogs.com/machao/p/5514921.html
http://xiongzenghuidegithub.github.io/blog/2016/01/29/yymodel-part-1/

YYModel.h

NSObject+YYModel.h
差点就忽略了一点..
Nullability: Xcode6.3 开始支持的特性 在Swift中经常使用到的是!、?

新特性的话我是一般用于函数的参数上,这样我就不必要做太多的判断
文件包含一个NSObject 的分类NSObject+YYModel.h
而NSObject+YYModel.h 文件上开头以及结尾所提到的:
NS_ASSUME_NONNULL_BEGIN #define NS_ASSUME_NONNULL_BEGIN _Pragma("clang assume_nonnull begin")
NS_ASSUME_NONNULL_END #define NS_ASSUME_NONNULL_END _Pragma("clang assume_nonnull end")
在这对宏之间的属性,方法的参数都默认被nonnull所修饰,需要nullable修饰的话要主动加上,像上图那样
在NSObject+YYModel.h中....其实里面写的不止是NSObject分类 还分别对NSDictionary、NSArray添加了自定义的方法...还有定义了几个类....很精彩
+ (nullable instancetype)yy_modelWithJSON:(id)json;
将一个请求得到的response转model /*这个response 的类型仅限定为NSDictionary、NSString、NSData*/
试试水先...


细看转模型的方法:

内部通过判别传入值是否为NSDictionary 、NSString抑或是NSData 类型 最终返回一个NSDictionary类型,传值仅限这3种类型传错了那就是nil咯

再看return的返回值
+ (nullable instancetype)yy_modelWithDictionary:(NSDictionary*)dictionary;

简单地来一个字典转model 的一个小尝试:

这里有一个类_YYModelMeta: 一般的话类名并不会用_开头,虽然也可以用$,习惯上都是以大驼峰法作为类的命名写法。至于作者的想法我就不得而知了。
点开方法内部阅读,真的很精彩....如果你读过runtime源码,你会发现有惊人的相似... 思路应该与此相似吧,可见YYModel作者对于底层的熟悉。

额,毕竟一个是结构体、一个是类,看到这我想起了结构体与类的区别
再继续

另外的话
这篇关于iOS:YYModel的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!