Swift - 从字典(或者Alamofire)直接创建Model文件的工具

效果

1. 常规生成model的方式

2. 通过debug创建model的方式

特性

1. 可以处理JSON格式的字典数据

2. 可以处理本地的json数据

3. 可以处理Alamofire生成的json格式返回数据

4. 生成的Models继承自NSObject,所有方法均系系统方法,没有任何接口污染,后续升级不存在版本兼容问题(以下是一个生成的Model的示例)

//
// AlamofireModel.swift
//
// http://www.cnblogs.com/YouXianMing/
// https://github.com/YouXianMing
//
// Copyright (c) YouXianMing All rights reserved.
// import Foundation // MARK: [Class] AlamofireModel class AlamofireModel: NSObject { // MARK: Stored propeties.
//----------------------------------------------------------------------------- var origin : String?
var url : String?
var args : ArgsModel?
var headers : HeadersModel? // MARK: Init methods.
//----------------------------------------------------------------------------- /**
Init with dictionary. - parameter dictionary: The json data dictionary. - returns: The instance.
*/
init?(dictionary : [String : AnyObject]?) { super.init()
if let _ : [String : AnyObject] = dictionary { setValuesForKeysWithDictionary(dictionary!) } else { return nil}
} /**
Override init. - returns: The instance.
*/
override init() { super.init()
} // MARK: SetValueForKey & setValueForUndefinedKey.
//----------------------------------------------------------------------------- /**
Sets the property of the receiver specified by a given key to a given value. - parameter value: The value for the property identified by key.
- parameter key: The name of one of the receiver's properties.
*/
override func setValue(value: AnyObject?, forKey key: String) { // To ignore Null value.
guard value != nil else { return
} // Dictionary: args
if key == "args" { let dictionary = value as! [String : AnyObject]
let model = ArgsModel(dictionary: dictionary) super.setValue(model, forKey: key)
return
} // Dictionary: headers
if key == "headers" { let dictionary = value as! [String : AnyObject]
let model = HeadersModel(dictionary: dictionary) super.setValue(model, forKey: key)
return
} super.setValue(value, forKey: key)
} /**
Invoked by setValue:forKey: when it finds no property for a given key. - parameter value: The value for the key identified by key.
- parameter key: A string that is not equal to the name of any of the receiver's properties.
*/
override func setValue(value: AnyObject?, forUndefinedKey key: String) { // [Example] change property 'id' to 'userId'.
//
// if key == "id" {
//
// userId = value as? NSNumber
// return
// } print("[‼️] The file '\(self.classForCoder).swift' has an undefined key '\(key)', and the key's type is \(value?.classForCoder).")
}
}

源码

https://github.com/YouXianMing/Create-Swift-JSON-Model/tree/master

Swift - 从字典(或者Alamofire)直接创建Model文件的工具的更多相关文章

  1. 经纬坐标(BLH)数据创建.kml文件小工具设计 Java版

    技术背景 KML,是标记语言(Keyhole Markup Language)的缩写,最初由Keyhole公司开发,是一种基于XML 语法与格式的.用于描述和保存地理信息(如点.线.图像.多边形和模型 ...

  2. linux下fallocate快速创建大文件

    以前创建文件我一般用dd来创建,例如创建一个512M的文件: dd命令可以轻易实现创建指定大小的文件,如 dd if=/dev/zero of=test bs=1M count=1000 会生成一个1 ...

  3. Swift - 添加纯净的Alamofire

    Swift - 添加纯净的Alamofire 如果你有代码洁癖,不能容忍任何多余的东西,请继续往下看.  . 下载Alamofire (https://github.com/Alamofire/Ala ...

  4. 用Swift重写公司OC项目(Day2)--创建OC与Swift的桥接文件,进而调用OC类库

    昨天把项目中的图标以及启动转场图片弄好了,那么今天,我们可以开始慢慢进入到程序的编写当中了. 由于swift较新,所以类库还不够完善,但是不用担心,苹果早就出了解决方案,那就是使用桥接文件,通过桥接文 ...

  5. swift -2018 - 创建PCH文件

    第一种:简单方式 在swift文件 创建一个OC文件 1> command + n 2> 3> 此时 你会发现有提示 让你创建桥接文件 4>删除 OC文件 5> 直接复制 ...

  6. 将JSON字典转换为Model文件

    将JSON字典转换为Model文件 1. 一切尽在不言中 2. 源码 https://github.com/YouXianMing/CreateModelFromJson 3. 说明 如果你还在手动写 ...

  7. EF学习之CodeFirst(一)--创建Model

    一.创建Model 创建Model类有两种方式: 1.直接创建model 所有约束条件都以特性的方式写在model的属性上面,映射到数据库的table表名标识在class上,例如: [Table(&q ...

  8. 0626-TP整理二(调试模式,空操作,跨控制器调用,跨方法跳转--redirect(),框架语法,创建model模型)

    一.调试模式(入口文件:index.php) define('APP_DEBUG', true);  //调试模式 define('APP_DEBUG', FALSE);  //运行模式 开启日志信息 ...

  9. ThinkPHP3创建Model模型--对表的操作

    创建Model模型 把"Home/Model"文件夹剪切到Application文件夹下,让Home和Admin共同使用. 第一种实例化模型的方法 第二种实例化模型的方法 第三种实 ...

随机推荐

  1. wpf DataTemplate ColumnDefinition width equal

    <Grid.ColumnDefinitions> <ColumnDefinition SharedSizeGroup="col1" /> <Colum ...

  2. SQL语句导致性能问题

    前阵子,突然收到服务器的报警信息,于是上服务器找问题,我擦,top看到mysql占的%cpu高得把我吓尿了 从以上的信息看,相信大家已经可以定位到底是那个程序导致服务器CPU负载过高了,但我们要做的是 ...

  3. Java编程的逻辑 (4) - 整数的二进制表示与位运算

    ​本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...

  4. Linux磁盘空间扩容(LVM)

    Linux磁盘空间扩容(lvm) 随着系统的运行时间增长,业务数据的增长,原有磁盘的空间会存在空间不足情况,导致系统不能正常运行,或者系统管理员磁盘没有完全划完,根据使用者的需求自行划分.那么怎么才能 ...

  5. hive的实现机制

    hive利用hdfs存储数据文件,利用MapReduce查询数据. 数据库:支持在线联机业务(实时.事务控制) 数据仓库:存储历史数据,面向主题的.主要用于离线数据分析的.

  6. PocketMoney

    PocketMoney( Money.pas/cpp/c)Description学校为了表彰tsoi的优异成绩, m个领导每人都决定给tsoi的一些人发一些小红包.于是n个Tsoier排成一排,等待着 ...

  7. JAVA 画图板实现(基本画图功能+界面UI)一、界面实现

    /*文章中用到的代码只是一部分,需要源码的可通过邮箱联系我 1978702969@qq.com*/ 这段时间在学JAVA的swing界面开发,试着做了个画图板.实现了直线.曲线.喷枪.矩形.圆形.文字 ...

  8. js加入购物车抛物线动画

    天猫将商品加入购物车会有一个抛物线动画,告诉用户操作成功以及购物车的位置,业务中需要用到类似的效果,记录一下实现过程备忘,先上demo 一开始没有想到用抛物线函数去做,也已经忘记还有这么个函数了,想着 ...

  9. Odoo创建基础模块和相关内容

    Odoo创建模块 这里我先引用一下几篇文章,这里完整的实现了一个odoo的模块创建demo https://segmentfault.com/a/1190000014047552 https://se ...

  10. [代码审计]SRCMS的两点小越权

    0x00 简介 SRCMS是一个开源的企业安全应急响应中心,基于ThinkPHP 3.2框架开发.该系统在2017-09-09已经停止更新了,主要是在翻看p神博客文章时看到这个,随想自己再审一次. p ...