美文网首页
Swift学习笔记---构造函数

Swift学习笔记---构造函数

作者: Warm_H | 来源:发表于2017-06-28 11:56 被阅读0次

    趁着最近有空闲的时间,想感受一下Swift的简洁and优雅,不过小菜鸟还在Swift的优雅简洁之路上匍匐前进,欢迎指正,共同学习进步……

    构造函数:init()
    作用:1.给成员变量分配空间 2.初始化

    在OC中:1.调用父类方法super.init 分配空间 2.初始化 如下:

    - (instancetype)init{
        //1.调用父类构造方法
        self = [super init];
        if (self) {
            //2.初始化
        }
        return self;
    }
    

    但在swift中与之相反:1.先实例化自己的对象 2.调用父类方法分配空间 如下:

    //必选属性 的构造函数
    //一般都为可选「除基本数据类型 后面有说到」
    var name :String
     override init() {
            self.name = "lu"
            super.init()
        }
    /**
    必选属性 的构造函数
    小结:1 .非optional的属性必须在构造函数中设置初始值,从而保证对象在实例化的时候,属性正确被初始化
         2.调用父类super.init 前,必须保证本类属性已初始化
         3.swift中 构造函数不用写 func
     */
    

    重载/重写 构造函数
    1.重写:override 关键字

     //重写 :父类存在相同方法,子类重新编写父类方法
     override init() {
            self.name = "lu"
            super.init()
        }
    

    2.重载:overload

     //重载 [函数名相同 参数和参数个数不同]
        init(name:String) {
            //参数name给属性赋值
            self.name = name
            super.init()
        }
      //注:如果重载了构造函数 并且没有实现父类init方法 系统不在提init()
      //注:OC中没有重载 只有initwithxxxxx
    

    KVC 构造函数

        //KVC 函数调用
        var sex : String?
        //1.定义模型属性【对象】时 一般是可选 避免写构造函数
        //var num :Int?
        var num :Int = 7
        //2.基本数据类型 不能设置成可选的 而且要设置一个初始值 否则会崩溃【必选】
        //3.private 属性 外界无法访问【KVC时 属性不能为private的】
        
         //使用字典给属性设置初始值
        init(dict:[String:AnyObject]) {
            //1.先调用父类 初始化完成
            super.init(name: "")
            //2.KVC方法
            setValuesForKeys(dict)
        }
    /**
    1.可选属性优点
    小结:1.避免写构造函数,简化代码
         2.需要的时候再创建,节省内存
         3.定义模型属性【对象】时 一般是可选;
           基本数据类型 不能设置成可选的 而且要设置一个初始值 否则会崩溃,因为KVC找不到Key
    2.KVC函数调用小结:
         (1)是OC的方法,运行时给对象发送消息,所以发消息前要保证对象已经实例化完成,因此调用KVC方法前 先要super.init,如上面代码
         (2)private 属性 【KVC时 属性不能为private的】
     */
    

    便利构造函数:关键字 convenience

        convenience init?(name :String, age: Int) {
            if age > 100 {
                return nil
            }
            //1.实例化当前对象
            self.init()
            //2.访问对象属性 设置值
            self.name = name
            self.age = age
        }
    /**
         1.允许返回nil 正常函数一定会创建对象
         --判断给定的参数条件是否符合,不符合就返回nil,不会创建对象,减少内存开销
         2.只有便利构造函数中使用self.init 构造当前对象
           --convenience
         3.访问对象的当前属性 一定在 self.init之后
         */
    

    析构函数

     deinit {//析构函数 类似于dealloc
            /**
             1.通知
             2.KVO
             3.NSTimer/CADisplayLink
             */
        }
    /**
     1.没有func ---->不让调用
     2.没有() ----> 不让重载
     3.对象销毁前 自动调用
     */
    

    欢迎指正,共同进步……

    相关文章

      网友评论

          本文标题:Swift学习笔记---构造函数

          本文链接:https://www.haomeiwen.com/subject/qszycxtx.html