• swift中模型Model的创建

    2016-08-17 15:46:13
    那么在swift中模型也同样重要下面介绍一下模型的赋值 1.介绍下 模型一键赋值的代码 setValuesForKeyWithDictionary 这句话的作用 是把字典Dictionary中的key对应的Value 赋值给模型中的与key一样的属性 1)分三种...

    //简介 oc是一个面向对象即模型的开发,一般规范的开发都是以模型作为对象进行开发的。那么在swift中模型也同样重要下面介绍一下模型的赋值

    1.介绍下 模型一键赋值的代码 setValuesForKeyWithDictionary 这句话的作用 是把字典Dictionary中的key对应的Value 赋值给模型中的与key一样的属性

    1)分三种情况 第一种情况是 模型中的属性等于 字典中的额key 并且一一对应 那么可以赋值

    2)第二种 模型中的属性大于字典中的key即模型除了与字典一一对应的属性之外还有其他属性 那么这个赋值也有用

    3)第三种 模型中的属性小于或者字典中存在模型中没有的属性名字 那么就会报错

    2.针对第三种情况 解决办法是  在模型中加上这句话就可以了 不要进行任何操作

    override func setValue(value:AnyObject?, forUndefinedKey key:String) {

    }
    下面附上代码例子
    //这边是创建一个简单 Person的模型 然后在界面赋值

    import UIKit


    class PersonModel: NSObject {


        //这是一个Person模型

        /// 年龄

        var age:Int =0

        /// 姓名

        var name:String =""

        /// 性别

        var sex:String =""

        /// 这边定义一个在字典里面的keyswift中的关键字的属性

        var undefine:String =""

        

        /**

         这个方法是防止使用setvalueforkeysWithDictionary的时候字典里的key在模型里面没有处理方法一般是把方法写出来里面不用写东西这样字典里出现模型没有的key的时候不会报错也不会赋值(除非像下面自己手动赋值)

         

         - parameter value: 模型中未定义的key值对应的value

         - parameter key:   模型中未定义的key值或者跟跟关键字冲突的字典的key

         */

        overridefunc setValue(value: AnyObject?, forUndefinedKey key:String) {

            if key =="Int"

            {

                undefine = valueas! String

            

            }

        }

        

        /**

         写一个构造函数主要目的是让其初始化的时候就有进行模型赋值不然一般步骤是创建这个模型然后模型进行setvaluesForkeywithdictionary

         

         - returns: 返回赋值后的模型

         */

        overrideinit() {

            super.init()

            let dic = ["age":18,"name":"Clement","sex":"man","Int":"test"]

            //模型一键赋值这个其实是运用了kvc的原理

            self.setValuesForKeysWithDictionary(dic)

            

        }

        /**

         这边是自定义的构造函数可以从外面传参使其初始化

         

         - parameter dic: 初始化模型的字典

         

         - returns: 返回赋值后的模型

         */

        init(dic:[String:AnyObject])

        {

            super.init()

            //模型一键赋值这个其实是运用了kvc的原理

            self.setValuesForKeysWithDictionary(dic)

        

        }

        

    }





    import UIKit


    class ViewController: UIViewController {


        overridefunc viewDidLoad() {

            super.viewDidLoad()

        

            //方式1用构造函数初始化并打印结果这个是自带的模型

            let personOne =PersonModel()

            print("模型的参数\(personOne.age\(personOne.name\(personOne.sex\(personOne.undefine)")

            

            //方式二用自定义的构造函数

            let dic = ["age":28,"name":"Clement__","sex":"man__ ","Int":"nuewtype"]

            let personTwo =PersonModel.init(dic: dic)

            print("模型TWO的参数\(personTwo.age\(personTwo.name\(personTwo.sex\(personTwo.undefine)")

            

            //方式三不写构造函数(即不用init

            let personThree =PersonModel()

            let dicThree = ["age":38,"name":"Clement__three","sex":"man__Three","Int":"nuewtype_three"]

            //外部对模型进行赋值

            personThree.setValuesForKeysWithDictionary(dicThree)

            print("模型Three的参数\(personThree.age\(personThree.name\(personThree.sex\(personThree.undefine)")

        }


        overridefunc didReceiveMemoryWarning() {

            super.didReceiveMemoryWarning()

            // Dispose of any resources that can be recreated.

        }



    }


    //输出结果

    模型的参数18  Clement  man  test

    模型TWO的参数28  Clement__  man__   nuewtype

    模型Three的参数38  Clement__three  man__Three  nuewtype_three



    最后附上oc部分的说明的一篇很好的文章 http://www.jianshu.com/p/870eb4b4170a

    展开全文
  • swift 初始化model的一个注意 如果在继承NSObject的model类里不进行初始化,即如下代码: override init(){ super.init() } 在调用这个初始化的时候,需要这样写(加一个中括号): var tempItemModel = ...
    swift 初始化model的一个注意
    
    如果在继承NSObject的model类里不进行初始化,即如下代码:
     override init(){
         super.init()
     }
    在调用这个类初始化的时候,需要这样写(加一个中括号):
    var tempItemModel = [HomeModel]()
    
    
    如果在model类里边进行了初始化,在调用这个类的时候,就可以正常写了:
    var tempItemModel = HomeModel()
    

    展开全文
  • swift版本的model

    2017-06-06 16:33:45
    // Author.swift // FlowerField // // Created by CJW on 17/6/6. // Copyright © 2017年 cjw. All rights reserved. // import UIKit class Author: NSObject {  

    //

    //  Author.swift

    //  FlowerField

    //

    //  Created by CJW on 17/6/6.

    //  Copyright © 2017 cjw. All rights reserved.

    //


    import UIKit


    class Author: NSObject {

        //认证类型 专家

        var auth:String?

        //所在城市

        var city : String?

        //简介

        var content:String?

        //是否订阅

        var dingYue:Int = 0

        //头像

        var headImg:String?

            {

            didSet{

                if !(headImg?.hasPrefix("http://"))!{

                    headImg = "http://static.htxq.net/" + headImg!

                }

            }

        }

        // 用户ID

        var id : String?

        //标识:官方认证

        var identity:String?

        //用户名

        var userName : String?

        //手机号

        var mobile : Int64 = 15444354345

        //订阅数

        var subscibeNum : Int = 0

        // 认证的等级 1 yellow 2 是个人认证

        var newAuth:Int = 0{

            didSet{

                switch newAuth {

                case 1:

                    authImage = UIImage(named: "u_vip_yellow")

                case 2:

                    authImage = UIImage(named: "personAuth")

                default:

                    authImage = UIImage(named: "u_vip_blue")

                }

            }

        }

        var authImage : UIImage?

        // 经验值

        var experience : Int = 0

        // 等级

        var level : Int = 1

        // 积分

        var integral : Int = 0

        

        init(dict:[String:AnyObject]){

            super.init()

            setValuesForKeysWithDictionary(dict)

        }

        override func setValue(value: AnyObject?, forUndefinedKey key: String) {

        }



    }


    展开全文
  • 结构体是可以作为 model 使用的不过也要 写下的创建方法 import UIKit/***创建一个model 结构,重写init 方法,结构体的属性不能出现可选类型**/ struct Model { var title :String var url :String ...

    结构体是可以作为 model 类使用的不过也要 写下的创建方法

    import UIKit
    /***
    创建一个model 结构,重写init 方法,
    结构体的属性不能出现可选类型
    **/
    struct Model { var title :String var url :String var numId :String init(dic :NSDictionary) { self.title = (dic["title"] as? String)! self.numId = (dic["numId"] as? String)! self.url = (dic["url"] as? String)! } } class ViewController: UIViewController { lazy var dicArr : Array<Dictionary<String, Any>>! = { var arr = Array<Dictionary<String, Any>>() for i in 0...26{ var dic = Dictionary<String,Any>() var title = String(format:"name_%f", CGFloat(i)) var numId = String(format:"numId_%d",i) var url = String(format:"https://name -%@ - numId %@",title,numId) dic["title"] = title dic["numId"] = numId dic["url"] = url arr.append(dic) } return arr }() override func viewDidLoad() { super.viewDidLoad() for dic in self.dicArr {//在这里调用下 稍后公布测试打印的结果 let model = Model.init(dic: dic as NSDictionary) print(model.url) } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }

    测试结果:

    https://name -name_0.000000 - numId numId_0
    https://name -name_1.000000 - numId numId_1
    https://name -name_2.000000 - numId numId_2
    https://name -name_3.000000 - numId numId_3
    https://name -name_4.000000 - numId numId_4
    https://name -name_5.000000 - numId numId_5
    https://name -name_6.000000 - numId numId_6
    https://name -name_7.000000 - numId numId_7
    https://name -name_8.000000 - numId numId_8
    https://name -name_9.000000 - numId numId_9
    https://name -name_10.000000 - numId numId_10
    https://name -name_11.000000 - numId numId_11
    https://name -name_12.000000 - numId numId_12
    https://name -name_13.000000 - numId numId_13
    https://name -name_14.000000 - numId numId_14
    https://name -name_15.000000 - numId numId_15
    https://name -name_16.000000 - numId numId_16
    https://name -name_17.000000 - numId numId_17
    https://name -name_18.000000 - numId numId_18
    https://name -name_19.000000 - numId numId_19
    https://name -name_20.000000 - numId numId_20
    https://name -name_21.000000 - numId numId_21
    https://name -name_22.000000 - numId numId_22
    https://name -name_23.000000 - numId numId_23
    https://name -name_24.000000 - numId numId_24
    https://name -name_25.000000 - numId numId_25
    https://name -name_26.000000 - numId numId_26

     

    那么问题就出现了,结构体和类做 model时候,有什么不同呢??????

    Swift中的类与结构体有如下相似点:
    
    1.定义属性来存储值。
    
    2.定义函数来提供功能。
    
    3.通过定义下标语法使用下标的方式取值。
    
    4.定义构造方法来对其进行初始化。
    
    5.通过扩展来在原始基础上添加功能。
    
    6.通过协议来定义实现标准。
    
    当然类和结构体也有许多不同点,下面这些功能是类独有的,结构体没有:
    
    1.通过继承来创建类的子类。
    
    2.在运行时允许对类的实例进行类型的检查和解释。
    
    3.析构方法可以释放被类引用的资源。
    
    4.通过引用计数允许一个类实例的多处引用。
    
    当开发者在代码中传递这些实例时,结构体总是被赋值,而类则是被引用。这是结构体和类的最本质区别。

     

    转载于:https://www.cnblogs.com/Bob-blogs/p/6590491.html

    展开全文
  • 为什么80%的码农都做不了架构师?>>> ...

    RT: 我在 OSC 也开源了我的 iOS [Swift] 代码生成脚本. 文档说明见: https://git.oschina.net/banxi1988/iOSCodeGenerator 欢迎大家围观.

    转载于:https://my.oschina.net/banxi/blog/810577

    展开全文
  • Json的解码与编码操作,这里使用swift自带的JSONDecoder 和 JSONEncoder 1、基础处理 如果你的 JSON 数据结构和你使用的 Model 对象结构一致的话,那么解析过程将会非常简单 2、自定义键值名 默认情形下 Keys ...
  • swift3 model模型解析
  • 1. 常规解析方法  //懒加载声明一个LJNewsModel为数据的数组  lazy var ljArray : [LJNewsModel] = [LJNewsModel]() //MARK:-- 数据获取和解析 extension NewsViewController{ func requestNetData(){... 打
  • Command + N - > iOS -> Core Data -> Data Model. 步骤二: 打开xcdatamodelId,创建一个Entity和属性。 步骤三: 选中创建的Entity,在右边的面板中选择第三个Tab(Data Model Inspector),在class一栏中添加项目名...
  • func setCellWithData(model:musicModel) -&gt; Void { self.title.text = model.title self.pic.text = model.pic self.time.text = model.time self.imgV.image = UIImage(named: model.number) }...
  • Model2App 是一个简单的Swift库实现将Swift数据模型转换为可用的CRUD程序
  • DictToModel 字典转model工具,也包含了一个model转json工具
  • 分享一个网站,通过json转换为各种语言的Model https://app.quicktype.io/ 支持Model语言 Json 格式
  • 1. 网络请求返回数据时候,把数据转化为model,但是有时候会返回空的字符串,所以加载了个长度的判断: class Model : NSObject{ var details_url:String? var easy_time:String? } class func creat...
  • 最近在一个混编项目中,一个OC类需要去访问一个Swift类,访问其他Swift类都可以,但就没法访问报以下错误: 点进去看发现该类型是个结构体,如下所示: 解决方案:因为Swift的结构体除了不能继承外可以有自己的成员变量和...
  • 很多时候,我们从服务端请求下的数据都是Json格式,我们需要拿这些数据显示到我们的UI界面。...在Swift中,由于runtime的局限,比较出名的有SwiftyJSON、ObjectMapper等。 其中: 1、SwiftyJSON本质上仍然是根
  • swift_和结构体

    2016-07-23 16:34:49
    /**  *  和结构体的对比 ... 与其他编程语言所不同的是,Swift 并不要求你为自定义和结构去创建独立的接口和实现文件。你所要做的是在一个单一文件中定义一个或者结构体,系统将会自动生成面
  • swift cell中的model

    2017-01-03 11:52:26
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
  • func chooseTxtContent() -> Void { guard let url = Bundle.main.url( forResource: "source/AllCountry/zh_Hans_CNCountry", withExtension: "txt") else { retu...
  • swift2.0中的反射,实现对象 字典相互转换 ===========mrshan 2016.1.14 ========================== 首先介绍一下Swift中的反射,在2.0中做了一定的修改,要获取它的运行时(Reflect),要对这个实例化对象调用...
1 2 3 4 5 ... 20
收藏数 7,864
精华内容 3,145