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. Selenium2+python自动化62-jenkins持续集成环境搭建【转载】

    前言 selenium脚本写完之后,一般是集成到jenkins环境了,方便一键执行. 一.环境准备 小编环境: 1.win10 64位 2.JDK 1.8.0_66 3.tomcat 9.0.0.M4 ...

  2. [转]解决阿里云mysql不能连接,配置mysql远程连接

    默认是不能用客户端远程连接的,阿里云提供的help.docx里面做了设置说明,mysql密码默认存放在/alidata/account.log 首先登录: mysql -u root -h local ...

  3. IntelliJ IDEA快捷键:F12

    The F12 key moves the focus from the editor to the last focused tool window. 将焦点从编辑器移动到最后一个聚焦的工具窗口.

  4. getImplementationVersion-获取版本号

    在工作中会遇到这个方法的使用,就记录一下. 一:getImplementationVersion 1.  方法 java.lang.Package.getImplementationVersion() ...

  5. kotlin下载地址收藏

    由于android studio 不同版本对应的kotlin版本是不同的,现在收藏 kotlin下载地址     https://plugins.jetbrains.com/plugin/6954-k ...

  6. MySQL数据库之视图

    1 引言 为了简化复杂SQL语句编写,以及提高数据库安全性,MySQL数据库视图特性.视图是一张虚拟表,不在数据库中以储存的数据值形式存在.在开发中,开发者往往只对某些特定数据和所负责的特定任务感兴趣 ...

  7. SQL语句之 多表管理

    SQL语句之 多表管理 一个数据库内通常会有不止一张表,有时候我们要把多张表联系起来,这就需要用到多表管理的语句. 1.外键约束 一个表中的非主键字段,如果在另外一张表中是主键,那么这个字段我们叫它做 ...

  8. python 字典相关操作

    字典 字典的增删改查 字典的创建方式: # 创建字典类型 info = { 'name':'李白', 'age':'25', 'sex':'男' } msg = { 'user01':'Longzel ...

  9. qq sid qq sid 是什么 qq sid 怎么用

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha ======= qq sid qq sid  是什么 qq sid  怎么用 ===== ...

  10. hdu 1116 敌兵布阵(树状数组区间求和)

    题意: 给出一行数字,然后可以修改其中第i个数字,并且可以询问第i至第j个数字的和(i <= j). 输入: 首行输入一个t,表示共有t组数据. 接下来每行首行输入一个整数n,表示共有n个数字. ...