Swift - 从字典(或者Alamofire)直接创建Model文件的工具
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文件的工具的更多相关文章
- 经纬坐标(BLH)数据创建.kml文件小工具设计 Java版
技术背景 KML,是标记语言(Keyhole Markup Language)的缩写,最初由Keyhole公司开发,是一种基于XML 语法与格式的.用于描述和保存地理信息(如点.线.图像.多边形和模型 ...
- linux下fallocate快速创建大文件
以前创建文件我一般用dd来创建,例如创建一个512M的文件: dd命令可以轻易实现创建指定大小的文件,如 dd if=/dev/zero of=test bs=1M count=1000 会生成一个1 ...
- Swift - 添加纯净的Alamofire
Swift - 添加纯净的Alamofire 如果你有代码洁癖,不能容忍任何多余的东西,请继续往下看. . 下载Alamofire (https://github.com/Alamofire/Ala ...
- 用Swift重写公司OC项目(Day2)--创建OC与Swift的桥接文件,进而调用OC类库
昨天把项目中的图标以及启动转场图片弄好了,那么今天,我们可以开始慢慢进入到程序的编写当中了. 由于swift较新,所以类库还不够完善,但是不用担心,苹果早就出了解决方案,那就是使用桥接文件,通过桥接文 ...
- swift -2018 - 创建PCH文件
第一种:简单方式 在swift文件 创建一个OC文件 1> command + n 2> 3> 此时 你会发现有提示 让你创建桥接文件 4>删除 OC文件 5> 直接复制 ...
- 将JSON字典转换为Model文件
将JSON字典转换为Model文件 1. 一切尽在不言中 2. 源码 https://github.com/YouXianMing/CreateModelFromJson 3. 说明 如果你还在手动写 ...
- EF学习之CodeFirst(一)--创建Model
一.创建Model 创建Model类有两种方式: 1.直接创建model 所有约束条件都以特性的方式写在model的属性上面,映射到数据库的table表名标识在class上,例如: [Table(&q ...
- 0626-TP整理二(调试模式,空操作,跨控制器调用,跨方法跳转--redirect(),框架语法,创建model模型)
一.调试模式(入口文件:index.php) define('APP_DEBUG', true); //调试模式 define('APP_DEBUG', FALSE); //运行模式 开启日志信息 ...
- ThinkPHP3创建Model模型--对表的操作
创建Model模型 把"Home/Model"文件夹剪切到Application文件夹下,让Home和Admin共同使用. 第一种实例化模型的方法 第二种实例化模型的方法 第三种实 ...
随机推荐
- SqlServer中 SET DATEFIRST更改
在 SQL Server 中默认情况下,每周的开始都是从周日开始算起的,如果默认星期一呢? 这里有三种方式可以解决这个问题: 一:直接通过 SET DATEFIRST VALUE 来更改重新生成新的 ...
- 《jquery实战》javascript 必知必会(1)
A1 javascript对象的基本原理 JS 的 Object 与其他兄弟面向对象所定义的根本对象,几乎没有什么共同之处. JS 的 Object 一旦创建,它不持有任何数据,而且不表示什么语义. ...
- IntelliJ IDEA快捷键:F12
The F12 key moves the focus from the editor to the last focused tool window. 将焦点从编辑器移动到最后一个聚焦的工具窗口.
- Android开源库集合(工具)
图片加载框架: Glide https://github.com/bumptech/glide Android-Universal-Image-Loader https://github.com/no ...
- linux操作系统语言更改
有时候我们的服务器在安装时安装的默认语言不支持中文,导致程序.文档中的汉子显示乱码,从而使系统报一些莫名其妙的错误,这是可以更改操作系统的默认语言 1.echo $LANG 查看当前操作系统的语 ...
- 关于调用&&传址
关于调用&&传址//数组int d1[];Function(int *d){} int main(){Function(d1);} //指针int *p;Function(int *q ...
- 初识PHP(一)
做为一名合格的前端开发攻城狮,了解一门服务端语言是必须的,所以我选了php.都说学的第一门语言对第二门语言会产生较大的影响,确实,每当我看到一个php知识点时,就同时会想到这个知识点在Javascri ...
- 使用 jquery jroll2 开发仿qq聊天列表侧滑功能
由于开发需求,需要做一个类似qq的聊天界面,侧滑弹出单条item右侧菜单,菜单可点击,效果如下图(包括点击事件+长按事件): 1.项目主体dom和css 页面结构比较简单,顶部header做了fixe ...
- 心跳包(HeartBeat)
http://itindex.net/detail/52922-%E5%BF%83%E8%B7%B3-heartbeat-coderzh 几乎所有的网游服务端都有心跳包(HeartBeat或Ping) ...
- 学习ABP遇到的问题汇总
1,在abp官网下载的模板(asp.net+ef)写Application层的时候需要使用AutoMapper.结果ObjectMapper一直为null 解决:需要在当前项目的Module依赖Abp ...