可以看见XCode报错了。Int?不能表现为Objc类型,所以在Objc运行时里面是找不到与之对应的类型,自然不能加上@Objc标记了。
那么怎么办?其实很简单,给它一个初始值就行了,在运行时可以将其转化成Objc的类型
现在打印出的结果是完全符合我们的预期了。KVC的强大之处在这里表现得淋漓尽致,我们根本不需要理会这些基本数据类型,KVC可以帮我们搞定。
两个问题和解决方案但是目前还有两个问题:一是如果接口有多种风格的属性名,比如这个接口将UserName,另一个叫做sUserName,又或者叫userName等,多种不同的属性名。至少我现在在做的项目至少有三种类型。其实这个非常简单,直接把所有属性的名字添加到selfMapDescription里面就行
selfMapDescription:[String:String]?{ return["sName":"name","iAge":"age","iGrade":"grade","UserName":"userName","sUserName":"userName","userName":"userName"]//将这个三属性名全部映射到userName }第二个问题,如果返回的数据里嵌套了复杂类型,比如Array,Dictionary或者是其他对象等,KVC就不能帮你自动转了
class DemoOther: GrandModel { var userName:String? selfMapDescription:[String:String]?{ return [ "userName":"userName"] } } class DemoClass:GrandModel { var name:String? userName:String? var otherClass:DemoOther? var otherClasses:[DemoOther]? selfMapDescription:[String:String]?{ return ["sName":"name", "iAge":"age", "iGrade":"grade", "UserName":"userName", "sUserName":"userName", "userName":"userName", "DemoOther":"otherClass", "DemoOthers":"otherClasses"] } } //下面来测试 let demoDict = ["sName":"Stan","iAge":"12","iGrade":"6","UserName":"userName","DemoOther":["userName":"OtherUserName"], "DemoOthers":[["userName":"OtherUserName1"],["userName":"OtherUserName2"]] ] var demo = DemoClass() demo = DemoClass.mapModel(demoDict) print(demo.otherClass) //打印出来是这东西, //Optional({ userName = OtherUserName;})打印出的数据虽然看起来好像是正确的,但是其实格式是错误的。也就是说,KVC不能转化复杂的或者自定义的对象。只能自己手动写了。
demo.otherClass = DemoOther.mapModel(demoDict["DemoOther"]!) print(demo.otherClass) //打印出来是这东西, //**Optional(DemoOther:["userName": OtherUserName])**这下打印出的东西就符合预期了,数组对象也一样,用个循环来转化即可。
总结上面的轻量型字典-Model转换方案虽然在功能上不能和第三方的Json-Model库相比,但对于大部分项目来说,还是够用了。使用KVC带来的性能上的损失我还是可以接受的,我讨厌写重复的代码。好了,以上就是第二篇的全部内容。请期待后面的 iOS开发技巧系列---打造强大的BaseModel 终极篇
文/黑暗中的孤影(简书作者)
原文链接:
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
相关推荐
感谢关注 Ithao123iOS频道,ithao123.cn是专门为互联网人打造的学习交流平台,全面满足互联网人工作与学习需求,更多互联网资讯尽在 IThao123!
关键词:
文章点评:
精选专题
Laravel入门教程
Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
hadoop学习及应用