美文网首页小经验小TipiOS-swift
十五、Swift3.0之构造函数(本类和子类)和重载构造函数

十五、Swift3.0之构造函数(本类和子类)和重载构造函数

作者: ZhengYaWei | 来源:发表于2017-02-26 16:25 被阅读151次

    本类必选属性的构造函数。

    /*
    必选属性的构造过程:
    1、给自己的属性分配空间并设置初始值
    2、调用父类的构造函数,给父类的属性分配空间并设置初始值
    以上这两个顺序和OC相比是完全相反的,OC中是先调用父类的方法,然后给自己的属性分配空间并设置初始值。
    var name: String
    //override表示重写
    override init() {
        name = "zhang"
        super.init()
    }
    */
    class Person: NSObject {
       var name: String
       //override表示重写
       override init() {
           name = "zhang"
           super.init()
           
       }
    }
    

    子类的必选属性的构造过程。

    
    /*
     子类的必选属性的构造过程,注意Student是Person的子类,所以可以直接使用Person类中的name属性,但是和自身类的属性初始化不一样,设置name属性的值,要放在super.init()之后。
     */
    class Student: Person {
        var no: String
        override init() {
            //这是本类的属性
            no = "001"
            super.init()
            //这是父类的属性
             name = "li"
        }
    }
    

    构造函数总结:
    1、非Optional属性都必须在构造函数中设置初始值。从而保证对象在被实例化的时候,属性都被正确的初始化。
    2、必须在调用父类构造函数之前,必须保证本类的属性都已经完成初始化。即属性设置初始值,必须在调用super.init()之前。

    重载构造函数。

    class Person: NSObject {   
        //重载:和重写相比,函数名相同,但是参数个数不同  如:override init() 和init(name: String)
        //重载的好处:重载可以给自己的属性从外部设置初始值
        //思考:OC中是否有重载?
        //答:没有,initWith***
        init(name: String) {
            print("person init 重载")
            //为了区分不同的name,这里要使用self. 否则xcode无法识别
            self.name = name
            super.init()
        }
    }
    

    相关文章

      网友评论

        本文标题:十五、Swift3.0之构造函数(本类和子类)和重载构造函数

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