【swift】--便利构造函数

【Swift大法好:昨天看博客的时候看到,有说Swift以后有可能开发安卓软件了。cool。。。】


  • 默认情况下,所有的构造方法都是指定构造函数 Designated

  • convenience 关键字修饰的构造方法就是便利构造函数

  • 便利构造函数具有以下特点:

    • 可以返回 nil

    • 只有便利构造函数中可以调用 self.init()

    • 便利构造函数不能被重写或者 super


便利构造函数应用场景

  • 根据给定参数判断是否创建对象,而不像指定构造函数那样必须要实例化一个对象出来

  • 在实际开发中,可以对已有类的构造函数进行扩展,利用便利构造函数,简化对象的创建

构造函数小结

  • 指定构造函数必须调用其直接父类的的指定构造函数(除非没有父类)

  • 便利构造函数必须调用同一类中定义的其他指定构造函数或者用 self. 的方式调用父类的便利构造函数

  • 便利构造函数可以返回 nil、


import UIKit


/* -- KVC构造函数

    KVC属性赋值的原理 -- 系统会给 实例化对象动态的发送 setValue(value: AnyObject?, forKey key: String) ,来给属性赋值

    1.这个实例化对象 必须存在, 内存分配

    2.属性分配内存

*/


class Person: NSObject {


    // 可选项,在初始化的时候会分配内存空间,默认值为nil

    //姓名

    var name: String?

    // this class is not key value coding-compliant for the key age

    // 年龄

    // age 基本数据类型 -- 在Swift 里与 KVC不兼容

    // age的默认值为nil, KVC找不这个属性

    // 默认给这个 age = 0

    var age: Int = 0

    var sex: Int = 0

    /*

        便利构造 -- 可以根据 我们的属性来动态的判断是否会返回值

        1. 有可能找不到对象, 返回 nil

        2. 便利构造需要借助其他的构造函数

        3. 便利构造函数的关键字-- convenience

    */

    //person 便利构造方法

    convenience init?(name: String,age: Int,sex:Int) {

    

        // 找对象的条件 -- 小于 18的 不行, 大于 25的不行, 我是男的,我得找女的

        if age < 18 || age > 25 || sex == 1 {

            return nil

        }

        

        // 必须初始化

        self.init(dic:["name":name,"age":age,"sex":sex])

    }

    

    //kvc构造方法

    init(dic: [String:AnyObject]) {

        

        // 报错问题一: 调用 setValuesForKeysWithDictionary方法之前,必须调用 super.init

        // 1. 完成本类的初始化

        // 2. 父类也会初始化

        // 3. 需要给 本类属性,进行初始化操作,进行初始化操作可以 在这个init里完成,name = "老王"

        //      我们想通过 KVC动态给属性赋值, 我们就需要把 属性设置成 可选项

        

        super.init()

        

        // 实例化对象已经创建完成,然后再调用 setValuesForKeysWithDictionary

        // 调用 setValuesForKeysWithDictionary -- 调用 setValue for key 来给属性赋值

        setValuesForKeysWithDictionary(dic)

    }

    //重写descriotion

    override var description: String {

        // 注意 keys

        let keys = ["sex","name","age"]

        return dictionaryWithValuesForKeys(keys).description

        

    }

   }


转载于:https://my.oschina.net/kaqijiang/blog/631262

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值