[swift]-类的构造函数

[swift]-类的构造函数,第1张

概述1:两种基本的构造函数   01-自定义构造函数:传入基本参数 > 01-init(name : String, age : Int) { self.name = name self.age = age} 02-自定义构造函数:传入一个字典 init(dict : [String : AnyObject]) { super.init()

1:两种基本的构造函数

01-自定义构造函数:传入基本参数

> 01-init(name : String,age : Int) {     self.name = name      self.age = age}

02-自定义构造函数:传入一个字典

init(dict : [String : AnyObject]) {        super.init()        // kvc 调用对象的KVC方法字典转模型        //self.setValuesForKeysWithDictionary(dict)        setValuesForKeysWithDictionary(dict)    }

// 注意:凡是使用kvc了,都要重写:overrIDe func setValue(value: AnyObject?,forUndefinedKey key: String) {} ;因为字典里某些字段不是类的属性就可以不会报错了

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

知识点1:

// as? 最终转成的类型是一个可选类型// as! 最终转成的类型是一个确定的类型,非可选类型

知识点2:

在类里调用对象的方法如kvc方法:self可以省略,//self.setValuesForKeysWithDictionary(dict) 简写成:setValuesForKeysWithDictionary(dict)

知识点3:

一般情况下,super.init(),我们不调用,系统会自动调用,系统调用是在该方法最后调用,但是当我们调用系统的kvc方法的时候,我们一定要确保该对象已经创建了,所以我们需要提前手动调用super.init()这个方法,如:

init(dict : [String : AnyObject]) {        // 提前调用super.init(),确保该对象已经创建了,不然怎么调用对象的一个kvc的方法呢        // 一般系统会默认调用super.init(),都是在该方法的最后的地方调用,这时候已经晚了,我们需要在调用kvc方法前就需要调用        super.init()        // kvc 调用对象的KVC方法字典转模型        //self.setValuesForKeysWithDictionary(dict)        setValuesForKeysWithDictionary(dict)    }

2:代码演示:

import UIKitclass Person: NSObject {    var name : String?    var age : Int = 0        // 在构造函数中,如果没有明确super.init(),name系统会自动帮我们调用super.init()    overrIDe init() {       //super.init()        print("1111111")    }            // 自定义构造函数:传入基本参数    init(name : String,age : Int) {        print("22222")        self.name = name        self.age = age    }            // 自定义构造函数:传入一个字典//    init(dict : [String : AnyObject]) {//        let tempname = dict["name"]//        //tempname是一个AnyObject?类型,转成String?//        // as? 最终转成的类型是一个可选类型//        // as! 最终转成的类型是一个确定的类型,非可选类型//        name = tempname as? String//        //        ////        let tempAge = dict["age"]////        //age = tempAge as! Int////        let tempAge1 = tempAge as? Int////        if  tempAge1 != nil {////            age = tempAge1!////        }////        print(age)//        //        if let tempAge = dict["age"] as? Int {//            age = tempAge//        }//    }            init(dict : [String : AnyObject]) {        // 提前调用super.init(),确保该对象已经创建了,不然怎么调用对象的一个kvc的方法呢        // 一般系统会默认调用super.init(),都是在该方法的最后的地方调用,这时候已经晚了,我们需要在调用kvc方法前就需要调用        super.init()        // kvc 调用对象的KVC方法字典转模型        //self.setValuesForKeysWithDictionary(dict)        setValuesForKeysWithDictionary(dict)    }            overrIDe func setValue(value: AnyObject?,forUndefinedKey key: String) {}    }//let p = Person()//let p1 = Person(name: "sky",age: 19)//if let name = p1.name {//    print(name)//}//print(p1.age)let p2 = Person(dict: ["name" : "mike","age" : 18,"height" : 1.88])print(p2.age)if let name = p2.name {    print(name)}


意见反馈邮件:1415429879@qq.com 欢迎你们的阅读和赞赏、谢谢!

总结

以上是内存溢出为你收集整理的[swift]-类的构造函数全部内容,希望文章能够帮你解决[swift]-类的构造函数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1073590.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存