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. [转] 钉钉的H5性能优化方案

    对于一个H5的产品,功能无疑很重要,但是性能同样是用户体验中不可或缺的一环.原本H5的渲染性能就不及native的app,如果不把性能优化做起来,将极大地影响用户使用产品的积极性. 用户感受 当用户能 ...

  2. 【LOJ】#2527. 「HAOI2018」染色

    题解 简单容斥题 至少选了\(k\)个颜色恰好出现\(S\)次方案数是 \(F[k] = \binom{M}{k} \frac{N!}{(S!)^{k}(N - i * S)!}(M - k)^{N ...

  3. Ubuntu服务器上相关软件或应用时常打不开的问题

    于接触linux系统时间不就,所以在操作上难免会出现失误,以下两个问题就是近期经常出现的问题,具体如下: 1.ubuntu服务器上的浏览器时常打不开. 2.安装的pycharm和系统自带的pychar ...

  4. Web安全之跨站脚本攻击(XSS)

    XSS 简介 跨站脚本攻击,英文全称是 Cross Site Script,本来缩写是CSS,但是为了和层叠样式表(Cascading Style Sheet,CSS)有所区别,所以在安全领域叫做&q ...

  5. div左边固定宽度,右边自适应宽度

    样式: <style type="text/css"> html,body { height: 100%; padding: 0; margin: 0; } .oute ...

  6. shiro xml标准配置

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  7. DIM-00014: Cannot open the Windows NT Service Control Manager.

    创建Oracle数据库时出错: OPW-00001: Unable to open password-file DIM-00014: Cannot open the Windows NT Servic ...

  8. 「LOJ 556 Antileaf's Round」咱们去烧菜吧

    「LOJ 556 Antileaf's Round」咱们去烧菜吧 最近在看 jcvb 的生成函数课件,顺便切一切上面讲到的内容的板子题,这个题和课件上举例的背包计数基本一样. 解题思路 首先列出答案的 ...

  9. Codeforces.810D.Glad to see you!(交互 二分)

    题目链接 \(Description\) 有一个大小为\(k\)的集合\(S\),元素两两不同且在\([1,n]\)内.你可以询问不超过\(60\)次,每次询问你给出\(x,y\),交互库会返回\(\ ...

  10. Linux shell 脚本小记2

    .从文件读取 while read line do echo "line=$line" done < file.txt .将字符串转换为数组,并进行遍历 str=" ...