Swift - 不借助第三方库转模型
2016-07-06 15:02
351 查看
JSON -> Model、Dictionary -> Model
文中网络用Alamofire,JSON解析用SwiftyJSON,生成Model文件借助 JSONExport。
后面也有自己写的一个工具类,可以生成自己想要的Model,如:加上前缀
模型类:( JSON -> Model )
import Foundation import SwiftyJSON struct TestModel{ /// var my_detail = "" //字面量语法声明,设置默认值,这样避免=nil的情况 /// var my_discount = 0 /// var my_etime : String! /// var my_expressPrice : Int! /// var my_expressType : String! /// var newPrice : Double! /// var my_thumbnailUrls : [ThumbnailUrl]! init(){} /** * Instantiate the instance using the passed json values to set the properties values */ init(fromJson json: JSON!){ if json == nil{ return } my_detail = json["detail"].stringValue my_discount = json["discount"].intValue my_etime = json["etime"].stringValue my_expressPrice = json["expressPrice"].intValue my_expressType = json["expressType"].stringValue my_newPrice = json["newPrice"].floatValue my_thumbnailUrls = [ThumbnailUrl]() let thumbnailUrlsArray = json["thumbnailUrls"].arrayValue for thumbnailUrlsJson in thumbnailUrlsArray{ let value = ThumbnailUrl(fromJson: thumbnailUrlsJson) thumbnailUrls.append(value) } } }
import Foundation class ThumbnailUrl{ var my_url : String! init(){} /** * Instantiate the instance using the passed json values to set the properties values */ init(fromJson json: JSON!){ if json == nil{ return } my_url = json["url"].stringValue } }
JSONExport工具
![](http://upload-images.jianshu.io/upload_images/2204247-bdea985afa1204f4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
模型类:( 字典 -> Model )
self.dataDict.my_itemName
//转模型: for item in dicts { datas.append(Model.init(dict: item)) }
import Foundation struct Model { /// var my_price = 0.0 /// var my_itemSummary = "" /// var my_period = 0 /// var my_thumbnailUrls = [ImageUrlModel]() init() {} init(dict:[String:AnyObject]) { //因为给属性设置了前缀,所以并不能使用这一方法自动匹配,需要手动书写 //setValuesForKeysWithDictionary(dict) my_price = dict["price"] as? Double ?? 0.0 my_itemSummary = dict["itemSummary"] as? String ?? "" my_period = dict["period"] as? Int ?? 0 //字典中还有数组,直接转模型 if let imageDict = dict["thumbnailUrls"] as? [[String:String]] { for item in imageDict { my_thumbnailUrls.append(ImageUrlModel(dict: item)) } } //my_thumbnailUrls = dict["thumbnailUrls"] as? [[String:String]] ?? [["":""]] } }
工具类:
如果要一个一个属性手动敲进去,未免太麻烦了。因此写了一个工具类,只要将打印出来的复制黏贴就可以,只要在必要的地方进行修改。现在将字典转为模型,只要
LCDModelTool.modelDefault("my", dict: dict)
struct LCDModelTool { /* * 没有通过第三方库 — — 字典转模型 直接将打印板中打印出来的东西黏贴到模型类里面就可以 * 适用于一般的字典结构,当字典结构比较复杂的时候只需要针对部分进行修改 * keyPrdfix : 自己想要定义的前缀 * dict : 需要转 model 的字典 * 使用 :LCDModelTool.modelDefault("my", dict: dict as! [String : AnyObject]) */ static func modelDefault(keyPrdfix:NSString, dict:[String:AnyObject]) { print("==========>") for (dictKey, dictVale) in dict { if dictVale is [AnyObject]{ print("///\nvar \(keyPrdfix)_\(dictKey) = [String]()") } if dictVale is [String:AnyObject]{ print("///\nvar \(keyPrdfix)_\(dictKey) = [String:AnyObject]() ") } if dictVale is String{ print("///\nvar \(keyPrdfix)_\(dictKey) = \"\" ") } if dictVale is Double{ print("///\nvar \(keyPrdfix)_\(dictKey) = 0.0 ") } } print("\n"); print("init() {}") print("\n"); print("init(dict:[String:AnyObject]) {") for (dictKey, dictVale) in dict { if dictVale is [AnyObject]{ print("\(keyPrdfix)_\(dictKey) = dict[\"\(dictKey)\"] as? [AnyObject] ?? [] ") } if dictVale is [String:AnyObject]{ print("\(keyPrdfix)_\(dictKey) = dict[\"\(dictKey)\"] as? [String:AnyObject] ?? [:]") } if dictVale is String{ print("\(keyPrdfix)_\(dictKey) = dict[\"\(dictKey)\"] as? String ?? \"\" ") } if dictVale is Double{ print("\(keyPrdfix)_\(dictKey) = dict[\"\(dictKey)\"] as? Double ?? 0.0 ") } } print("}") print("\n==========>@end\n"); } }
相关文章推荐
- Apple Swift学习教程
- 介绍 Fedora 上的 Swift
- Swift中实现点击、双击、捏、旋转、拖动、划动、长按手势的类和方法介绍
- Swift自定义iOS中的TabBarController并为其添加动画
- Swift编程中的泛型解析
- Swift中定义二维数组的方法及遍历方法示例
- Swift实现Selection Sort选择排序算法的实例讲解
- 简单分析Swift语言的一些基本特征
- 使用 Swift 语言编写 Android 应用入门
- 理解二叉堆数据结构及Swift的堆排序算法实现示例
- Swift与C语言指针结合使用实例
- Swift心得笔记之控制流
- 用Swift构建一个简单的iOS邮件应用的方法
- 苹果公司推出的新编程语言Swift简介和入门教程
- Swift实现iOS应用中短信验证码倒计时功能的实例分享
- 使用Swift代码实现iOS手势解锁、指纹解锁实例详解
- 探讨Swift数组和字典
- Swift中的指针操作和使用详细介绍
- Swift代码实现冒泡排序算法的简单实例