playground 简易json字符串转化Model
最近被公司超长的json【惊悚】给烦死了,趁着午休简易写了一个,还有很多改进之处,慢慢完善吧
1 完善出转化Object的
2 完善出转化Swift
3 晚上随意转化swift Object
比较粗糙六个Tagextension String: TMObjcProperty{func convertObjcProperty() -> String { return """ @property(copy,nonatomic) NSString * (self); """ } func convertObjcClassProperty() -> String{ return """ @property(copy,nonatomic) (self.capitalized) * (self); """ } func convertObjcArrayProperty() -> String{ return """ @property(strong,nonatomic) NSArray<(self.capitalized)*> * (self); """ } func convertObjcStringProperty() -> String { return """ @property(copy,nonatomic) NSString * (self); """ } func convertObjcNumberProperty() -> String { return """ @property(assign, nonatomic) NSNumber * (self); """ }} var pName = TMObjecConvertProperty.init("name").propertyvar item = ["name":"Jack", "list":["name":"Jack"]] as String : Anyextension Dictionary{ func toModel(_ className: String = "ItemClassName", superClassName:String = "NSObject", frameworks:String = "#import<UIKit/UIKit.h>") -> String{ var container:String = String var imports = frameworks for (key, value) in self { let k = "(key)" switch value { case is String : container.append( k.convertObjcProperty()) break case is Double: container.append( k.convertObjcNumberProperty()) case is Int: container.append( k.convertObjcNumberProperty()) case is Bool: container.append( k.convertObjcNumberProperty()) break case is Array<Any> : container.append( k.convertObjcArrayProperty()) print((value as! Array<Any>).toModel(k.capitalized)) break case is Dictionary: container.append( k.convertObjcClassProperty()) imports.append(""" #import"(k.capitalized).h" """) print((value as! Dictionary<String, Any>).toModel(k.capitalized)) break default: print("") } } return """ (imports.joined(separator: "n")) @interface (className.capitalized):(superClassName) (container.joined(separator: "n")) @endn @interface (className.capitalized)() //TODO 子这里补全extension @end @implementation (className.capitalized) @end """ }} extension Array{ func toModel(_ propertyName: String = "list", className: String = "Item") -> String{ var dest = "" if self.isEmpty{ dest = "@property(nonatomic, strong) NSArray (propertyName);n" }else{ let value = self.first! switch value { case is Dictionary<String, Any> : dest = "@property(nonatomic, strong) NSArray<(className.capitalized)> *(propertyName);n" print((value as! Dictionary<String, Any> ).toModel(propertyName.capitalized)) break case is String: dest = "@property(nonatomic, strong) NSArray<String*> *(propertyName);n" break case is Bool: dest = "@property(nonatomic, strong) NSArray<NSNumber*> *(propertyName);n" break case is Int: dest = "@property(nonatomic, strong) NSArray<NSNumber*> *(propertyName);n" break case is Double: dest = "@property(nonatomic, strong) NSArray<NSNumber*> *(propertyName);n" break default: dest = "" } } return dest }}//print(["name":"jack", "age":12,"height":175.3, "sub":"name":"Jack", "items":1,2,3].toModel()) //print("n") //print(["name":"JJJ"].toModel())do{ let jsonObj = try JSONSerialization.jsonObject(with: json.data(using: String.Encoding.utf8)!, options: JSONSerialization.ReadingOptions.allowFragments) as! Dictionary<String, Any> print(jsonObj.toModel("TlbModel"))}catch{ print(error.localizedDescription) }
测试用例print(["name":"jack", "age":12,"height":175.3, "sub":["name":"Jack"], "items":[1,2,3]].toModel()) print("n") print([["name":"JJJ"]].toModel())
测试结果
#import<UIKit/UIKit.h>
@interface Sub:NSObject
@property(copy,nonatomic) NSString * name;
@end
@interface Sub()
//TODO 子这里补全extension
@end
@implementation Sub
@end
@property(nonatomic, strong) NSArray<NSNumber*> *Items;
#import<UIKit/UIKit.h>
#import"Sub.h"
@interface Itemclassname:NSObject
@property(assign, nonatomic) NSNumber * height;
@property(assign, nonatomic) NSNumber * age;
@property(copy,nonatomic) Sub * sub;
@property(copy,nonatomic) NSString * name;
@property(strong,nonatomic) NSArray<Items*> * items;
@end
@interface Itemclassname()
//TODO 子这里补全extension
@end
@implementation Itemclassname
@end
#import<UIKit/UIKit.h>
@interface List:NSObject
@property(copy,nonatomic) NSString * name;
@end
@interface List()
//TODO 子这里补全extension
@end
@implementation List
@end
@property(nonatomic, strong) NSArray<Item*> *list;
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 解决:打包SpringBoot项目成jar包后,其他的项目无法引入jar包中的对象
- 【分享】MPSoC R5引导4个A53和两个R5的应用程序的例子
- 【分享】MPSoC交叉编译例子
- JSON.stringify() 的 5 个秘密特性
- Kyverno - Kubernetes 原生策略管理引擎
- 你不知道的 Vue 单元测试(6000字实战单元测试)
- Linux系统异常排查实践与总结
- 它会不会成为OCR领域霸主?经过一个月的分析,我得出了这些结论
- 【一天一大 lee】二叉搜索树中的插入操作 (难度:中等) - Day20200930
- docker 由于iptables导致无法正常启动问题临时解决方案
- 【一天一大 lee】反转字符串 (难度:简单) - Day20201008
- 【一天一大 lee】四数之和 (难度:中等) - Day20201005
- 【一天一大 lee】两数相加 (难度:中等) - Day20201004
- 历经14天自定义3个注解解决项目的3个Swagger难题
- 【一天一大 lee】秋叶收藏集 (难度:中等) - Day20201001