迈克尔杰克逊生殖问题:忽略JSON配置值问题,怎么解决

扫码加入我们
& 2017 内容协议请登录查看
1.如何导入框架
直接拖拽Reflect文件夹到您的项目中即可,无任何第三方依赖!
文件夹结构说明:
.Coding 归档相关
.Reflect 反射核心包
.Dict2Model 字典转模型
.Model2Dict 模型转字典
注:框架中已为您准备了大量懒人式示例,并且简单到你直接调用类方法即可查看效果,
1.Parse-Parse8为字典转模型解析系列。
2.Convert1-Convert4为模型转字典系列。
3.Archiver1-Archiver3为归档系列。
使用方法如Studetn1.Parse(),Person1.Convert(),Book1.Action()。
2.关于MJExtension-Swift
我们可以将其理解成是MJExtension的Swift版本,它可以完成类反射、一键字典转模型、一键模型转字典、一键plist转模型以及一键归档!
MJExtension(OC):&&
直接调用对象的properties即可枚举反射您的对象
p1.properties { (name, type, value) -& Void in
println("\(name),\(type),\(value)")
除了使用对象调用之外,你还可以不创建对象,直接类方法调用,此时的value无意义:
Person.properties { (name, type, _) -& Void in
println("\(name),\(type)")
其中name是您的模型的属性名,type是封装的ReflectType数据类型,value是变量的值, 重度使用者请详细参考ReflectType的封装,您可以详细的知道每个属性是什么情况,如:
具体的数据类型.是否是基本数据类型.是否为数组.是否为Optional.是否为OC过来的对象.是否为自定义的Class类var typeName: String!/**
系统解析出的Type
*/var typeClass: Any.Type!var disposition: MirrorDisposition!var dispositionDesc: String!/**
是否是可选类型
*/var isOptional: Bool = false/**
是否是数组
*/var isArray: Bool = false/**
真实类型: 可选 + 数组
*/var realType: RealType = .None
,除了上面介绍的功能之外,还加入了仿OC打印: 你可以直接打印您的对象,比如打印Book1对象(BOOK1类位于项目中的Archiver1.swift中):println(book1)
控制台会这样输出:Reflect.Book1 &0x7a09fb10&: {name: tvbprice: 36.6}
附加功能之解析过程的字段映射与字段忽略,子类只需重写此方法即可:/**
*///使用模型的userModel属性去解析并接受字典中的user_model键值对func mappingDict() -& [String: String]? {
return ["userModel":"user_model"]}
*///忽略并且不解析模型的info属性func ignorePropertiesForParse() -& [String]? {
return ["info"]}
您还可以使用以下方法完成字符串向类的转变:let cls = ClassFromString("Reflect.Person")
不过请注意,这里的字符串是含有命名空间的。
(2)一键字典转模型
字典转模型非常简单,已做各种级联,这里不再赘述细节了:let stu1 = Student1.parse(dict: Student1Dict)let stus = Student7.parses(arr: Student7DictArr)
如果你属性为Bool,你可能会遇到UndefinedKey,这是因为swift自身的原因,你只需实现以下方法手动解析:override func setValue(value: AnyObject?, forUndefinedKey key: String) {
self.isVip = (value as! Int) != 0}
解析Plist文件,请不要带后缀:let author = Author.parsePlist("Author")
(3)一键模型转字典
模型转字典也非常简单,已做各种级联,这里不再赘述细节了:let dict = person3.toDict()
(4)一键归档
归档已做了级联,使用同样简单,同时封装了Caches文件夹的操作,直接保存在Caches文件夹中
归档:单个模型归档name可为空,数组时name值不可为空,返回归档位置let path1 =
Book2.save(obj: book2, name: nil)let path2 =
Book3.save(obj: bookArr, name: "book3")
读取:请使用同样的key,如保存没有使用name为nil,读取同样使用nillet arcBook2 = Book2.read(name: nil)let arr = Book3.read(name: "book3")
删除数据:Book1.delete(name: nil)
附加功能:归档字段忽略/**
归档字段忽略
*///不归档模型中的icon字段func ignoreCodingPropertiesForCoding() -& [String]? {
return ["icon"]}
3.解释下对该框架存在的某些疑问。
&(1)这个框架并不是对MJExtension的纯Swift翻译,虽然MJExtension-Swift与MJExtension有着相差无异的功能,但是它们两个的底层差别甚多。可能大家觉得在反射这方面它们体现出的功能效果是一样的,但其实它们的基本代码并无相同之处。不过对于一键互转字典-模型来说,它们都是基于反射功能上实现的。&&(2)虽然OC中的Runtime在Swift中经测试发现可用,但在Swift中更多的是叫Reflect反射,所以Runtime在Swift中并不是很好用。&&(3)值得注意的是Swift有全名空间,所以是不需要前缀的,但是将框架命名为CFRuntime是因为没有把使用OC的习惯改正过来,而OC的Runtime特性个人比较喜欢,就用了Runtime,而非Swift中的Reflect。
&(4)它并不支持Swfit中的结构体噢,两点原因:&结构体主要用于数据结构,是值类型,大型数据使用引用类型的类更好。 从继承的角度来说,继承自NSObject,就已经说明问题。4.结语&& &写出这套框架是由于个人对于MJExtension太过依赖,但是公司的项目已经全部Swift化,所以只好抓紧时间在参考大量资料和综合了MJExtension理念的情况下写出来,该框架的API与MJExtension保持高度一致,如果你会使用MJExtension,那么上手CFRuntime基本没多大问题。
更新记录:
意见反馈:
联系方式:
广告等垃圾信息
不友善内容
违反法律法规的内容
不宜公开讨论的政治内容去除json解析出的字典货数组里的null值 MJExtension用法
查看次数:4511
下载次数:683
上传时间:
大小:374 B
最近想弄一下网络架构,无意之间发现,后台给的数据有的是null,用MJExtension转换模型之后,模型属性会为null。网上查了一下也没有什么好的去null方法,就自己写了一个。
这个demo也有一些MJExtension的常用法,大家感兴趣的话可以自行下载,有什么问题也可以反馈给我,大家一起学习!!!!
您还没有登录!请或
下载过该代码的还下载了
本周热门下载
&2018 Chukong Technologies,Inc.
京公网安备89扫码加入我们
& 2017 内容协议Pages: 1/3
涓婚? : MJExtension鏄疛SON鍜孧odel杞?崲鏈

我要回帖

更多关于 git 配置忽略文件 的文章

 

随机推荐