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

时间: 2024-10-26 07:13:54

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

TP5 快速创建model指令

在项目目录下,执行指令:php think make:model + 目录名称, 例如: 执行:php think make:model api/BannerItem, 创建完成之后,BannerItem 的真实路径为api/model/BannerItem,系统会自动创建model文件夹 原文地址:https://www.cnblogs.com/PLA-Artillery/p/9195964.html

linux下fallocate快速创建大文件

以前创建文件我一般用dd来创建,例如创建一个512M的文件: dd命令可以轻易实现创建指定大小的文件,如 dd if=/dev/zero of=test bs=1M count=1000 会生成一个1000M的test文件,文件内容为全0(因从/dev/zero中读取,/dev/zero为0源) 但是这样为实际写入硬盘,文件产生速度取决于硬盘读写速度,如果欲产生超大文件,速度很慢 在某种场景下,我们只想让文件系统认为存在一个超大文件在此,但是并不实际写入硬盘 则可以 dd if=/dev/zer

Swift - 添加纯净的Alamofire

Swift - 添加纯净的Alamofire 如果你有代码洁癖,不能容忍任何多余的东西,请继续往下看.  1. 下载Alamofire (https://github.com/Alamofire/Alamofire) 2. 解压缩并打开 Alamofire.xcworkspace 3. 删除不必要的内容 (根据你的需求自己定) 4. 顺便把文件夹里面的无关内容也删除掉 5. 创建一个测试项目 Swift-Alamofire 6. 嵌入Alamofire.framework (注意,把Alamof

【总结】Kylin创建Model

根据如下四类表数据,创建Model, 事实表为酒店信息表,其余三张维度表是城市信息,行政区信息,商圈信息.酒店信息表中有外键分别与地域相关三张表关联 DICT_CITYINFO DICT_HOTELINFO DICT_REGIONINFO DICT_ZONEINFO 第一步 Model Info Model的基本信息 第二步 Data Model 选择事实表,依次关联Looup Table.以hotelinfo为基础,我们采用inner joint 关联城市表: 关联行政区表 关联商圈表 第三步

Swift游戏实战-跑酷熊猫 01 创建工程导入素材

在这节里,我们将建立一个游戏工程,并导入一些必要的素材,例如序列帧动画文件,声音素材文件.动画文件我们使用atlas形式.在打包发布或者模拟器测试的时候,它会将整个.atlas文件夹下的图片打包成一张png图片. 要点: texture atlas :它包含了一组相关的texture.使用atlas可以提高性能 项目文件地址 http://yun.baidu.com/share/link?shareid=3824235955&uk=541995622 Swift游戏实战-跑酷熊猫系列 00 游戏

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

昨天把项目中的图标以及启动转场图片弄好了,那么今天,我们可以开始慢慢进入到程序的编写当中了. 由于swift较新,所以类库还不够完善,但是不用担心,苹果早就出了解决方案,那就是使用桥接文件,通过桥接文件,系统会把类库中的OC代码转换成swift语言,这样用起来其实没什么障碍. 那么如此创建桥接文件以及如何调用类库的一些方法呢?请看以下截图.. 如此创建一个OC的.m文件,当你点击了next输入文件名,然后选择存放位置之后create,系统会弹出如下选项: 看到这里,当然要选择后者了,我们的目的就

django创建model

django创建model 1. steps: new app add model class in app/models.py python manage.py migrate 2. model class 很简单,在models.py里面定义一个继承models.Model的类即可. # Create your models here. class Person(models.Model): name = models.CharField(max_length=30) 然后python ma

Swift创建桥接文件,Swift使用MJRefresh刷新插件

刚开始玩Swift,想做个下拉刷新的功能,发现在OC中用得比较多的第三方插件是MJRefresh.查了一下,在Swift中使用OC的插件要通过桥接文件,然后又百度一下怎么创建桥接文件,发现很多都是老司机写的,不是很详细,所以特意总结一下. 一.创建一个Head.h文件 二.在Build Setting中设置头文件的路径. 右键工程 > Build Setting > Objective-C Bridging Header 添加一个选项. 路径填:$(SRCROOT)/Header.h,如果He

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

一.创建Model 创建Model类有两种方式: 1.直接创建model 所有约束条件都以特性的方式写在model的属性上面,映射到数据库的table表名标识在class上,例如: [Table("UserInfo")] public class User { [Key]//主键 public int ID { get; set; } [MaxLength(50)]//最大长度 [Required]//不可为空 public string UserName { get; set; }