swift构造方法

来源:互联网 发布:php和java哪个好找工作 编辑:程序博客网 时间:2024/04/30 22:24

class Human {

        

        var name:String?

        var age:Int?

        

        //正常构造

        init(name:String,age:Int){

            self.name = name;

            self.age  = age;

        }

        

        //缺省构造

        init(name:String){

            self.name  = name;

        }

        

    }

    

    

    /**

    结构体逐一成员构造方法是结构体特有的,类是没有这个构造方法的。

    */

    

    

    struct Size {

        

        var width:Double  = 0.0;

        var height:Double = 0.0;

        var area:Double{

            

            return width * height;

        }

        

    }

  

    /**

    枚举类型的构造方法.

    枚举是不能通过类型来隐式调用构造方法的,只有给枚举定义了构造方法,才可以让枚举像类或者结构体那样构造对象。

    */

    

    enum Color:String {

        

        case Red  = "red"

        case Blue = "blue"

        case White = "white"

        

        init(){

            self = .Red;

        }

        

        init(color:Color){

            

            self = color;

        }

        

        

    }

    

    

    /**

    值类型的构造方法代理。

    当调用某个构造方法时,通过构造方法之间的调用,可以有效减少代码量。

    */

    

    

    class Hello {

    

        var language:String?

        var time:Int?

        

        convenience init(language:NSString){

            

            self.init(lang:language as String ,time:10);

        }

        

        init(lang:String,time:Int){

            

            self.language = lang;

            self.time = time;

            

        }

    }

    

    

    /**

    当某个存储属性的类型为可选类型时,可以不在构造方法中对这个属性进行赋值。

    在构造方法中,可以对常量属性赋值。其它任何时候都不能再赋值

    */

    

    

    /**

    *  特别注意闭包后面的()如果没有它,只是将闭包赋值给了这个属性。加上()就是将包内的结果赋值给了属性。

    */

    struct PKPic {

        

        var number:Int = {

            

            var count = 0;

            for i in 0...5

            {

                //   count ++; error中间不可以有空格

                count++;

            }

            return count

        }()

        

    }

    

    

    /**

    派生类的构造方法

    1】便利构造方法。构造方法互相嵌套,或者只传某个属性的值。

    2】制定构造方法。将所有属性都一一赋值。

    3】给派生类编写构造方法。

    派生类可以自己写一个构造方法,然后super调用父类的构造方法之后,再处理本类中特殊的构造方法。

    */

    

    

    /**

     指定构造方法和便利构造放大的调用规则:

    1】派生类的构造方法只能向上调取父类的制定构造方法。!!制定构造方法!

    2】便利构造方法只能同向调用奔雷的其他构造方法

    3】便利构造方法最终必须以一个制定构造方法调用结束。

    */

    

    

    /**

    构造方法的重写

    1是对父类的制定构造方法的重写,重写前要有override关键字。

    2父类的便利构造方法无法在子类中被重写,就是子类中有名字相同的,那也不是被重写,更不用提override关键字了,二者毫无关系。

    */

    

    

    /**

    构造方法的自动继承。

    默认情况下,父类的构造方法不会被子类继承。下面的情况下会继承

    1如果派生类没有引用任何存储属性或者引入的存储属性都有缺省值

    2】如果派生类重写了父类的所有的制定构造方法。

    */

    

    

    

    /**

   必须构造方法。 关键字required

    如果某个构造方法被标记为必须构造方法,那么后续的所有继承类都要实现该构造方法。子类在重写必须构造方法时,必须在前面加上required关键字,用来表示在继承链上所有的类都必须实现该构造方法。

    */


0 0
原创粉丝点击