• swift-03-构造器(Designated&&Convenience)


    类里面所有的存储型属性--包括所有继承自父类的属性,都必须在构造过程中设置初始值。
     
    构造器,为了确保所有类实例中的存储型属性都能获得初始值,设置了两个构造器--他们分别是指定构造器和便利构造器。
     
    指定构造器,是类中最主要的构造器。 一个指定构造器将初始化类中所提供的所有属性,并根据父类链往上调用父类的构造器来实现父类的初始化。
     
    每个类都必须拥有至少一个指定构造器,在某些情况下,许多类通过继承了父类中的指定构造器而满足了这个条件。
     
    便利构造器是类中比较次要的、辅助性的构造器。你可以定义便利构造器来调用同一个类中的指定构造器,并为其参数提供默认值。你也可以定义便利构造器来创建一个特殊用途或者特定输入的实例。
    你应当值在必要的时候为类提供便利构造器,比方说,在某种情况下通过使用便利构造器来快捷调用某个指定构造器,能够节省更多的开发时间并让类的构造过程更清晰明了。
     
    指定构造器的语法
    init(parameters) {
         statements
    }
    

    便利构造器的语法

     convenience init(parameters) {
         statements
    }
    

      便利构造器和指定构造器之间的规则

    1.指定构造器必须调用其直接父类的指定构造器

    2.便利构造器必须调用同一个类中定义的其他构造器

    3.便利构造器必须最终以调用一个指定构造器结束。

    4.指定构造器向上代理;

    5.便利构造器横向代理

    swift类的构造过程包含两个阶段:

    1.每个存储型属性通过引入他们的类的构造器来设置初始值;

    2.当每个存储型属性值被确定后,给每个类一次机会,在新实例准备使用之前进一步定制他们的存储型属性。

    ---可以有效地防止属性值在初始化之前被访问;也可以防止属性被另一个构造器意外地赋予不同的值。

    安全检查1:

    指定构造器必须保证它所在类引入的所有属性都必须先初始化完成,之后才能将其他构造任务向上代理给父类中的构造器。

    一个对象的内存只有在其所有存储型属性确定后才能完全初始化。

    安全检查2:

    指定构造器必须向上代理调用父类构造器,然后再为继承的属性设置新值。如果没这么做,指定构造器赋予的新值,将被父类中的构造器所覆盖。

    安全检查3:

    便利构造器必须先代理调用同一类中的其他构造器,然后再为任意属性赋新值。如果没这么做,便利构造器赋予的新值将被同一类中的其他指定构造器所覆盖。

    安全检查4:

    构造器在第一阶段构造完成之前,不能调用任何实例方法,不能读取任何实例属性的值,self的值不能被引用。

    类实例在第一阶段结束以前,并不是完全有效,仅能访问属性和调用方法,一旦完成第一阶段,该实例才会声明为有效实例。

    写不下去了。这个文档真是差评,案例太少了。

  • 相关阅读:
    rabbitmq channel参数详解
    rabbitmq direct、fanout、topic 三种Exchange java 代码比较
    spark 性能优化
    spark sql 窗口函数over partition by
    Python爬虫从入门到进阶(4)之xpath的使用
    Python爬虫从入门到进阶(3)之requests的使用
    Python爬虫从入门到进阶(2)之urllib库的使用
    Mac环境下Redis的安装
    Mac环境下Vagrant的安装
    Mac环境下Scrapy的安装
  • 原文地址:https://www.cnblogs.com/tanglimei/p/5130819.html
Copyright © 2020-2023  润新知