Swift学习笔记系列——(13)初始化
Tags: Swift 学习笔记 发布时间:2015-08-04 Swift学习笔记系列——(13)初始化初始化目标:类、结构体和枚举 给存储属性初始值类和结构体的存储属性在使用前必须要有初始值,提供初始值可以通过定义时指定,也可以通过构造方法赋值。 自定义初始化通过构造方法的参数给必须要有值的存储属性赋值、给可选类型属性赋值; 构造方法的参数语法和函数以及方法的相同。 默认构造方法如果结构体和类中所有的属性都有默认值了,尽管没有明确声明,但实际上已经有了一个不需要参数的默认构造方法。 结构体的额外特权(Memberwise Initializers for Structure Types)即使没有给全部属性度提供默认值,结构体仍会自动获得一个构造方法(Memberwise Initializers)。 值类型的初始化代理构造方法可以调用其它构造方法来实现一个实例初始化的一部分。这个过程,叫做构造方法代理(initializer delegation),这样做避免了在多个构造方法中出现重复代码。 构造方法代理的工作规则和什么形式的代理是被允许的,这些对于值类型和类类型而言是不相同的。 对于值类型,采用selft.init引用其他构造方法即可。 对于值类型,如果想在自定义的构造方法中引用自动获得的构造方法,那么把自定义构造方法写在扩展中。 类的继承和初始化继承是类的特有行为,类的初始化要保证类的所有属性都被赋值,不论是继承来的还是自身定义的。 类的初始化通过两种构造方法实现:指定构造方法和方便构造方法 指定构造方法必须要有,可以有多个,但一般是一个,是继承链上的一部分,子类的指定构造方法会调用超类的构造方法。 方便构造方法不是必须的,必须要引用同一个类的指定构造方法,可以有多个。定义的时候需要用关键字“convenience ”特别强调。 构造方法调用其他构造方法的规则指定构造方法必须调用它的直接超类的一个指定构造方法。 指定构造方法总是被委托方; 初始化的两个阶段这部分主要要说明类的初始化顺序。 https://www.processon.com/view/link/55bb389be4b0f902d22391f7 第二阶段开始才可以访问实例方法和self。 构造方法的继承和重写子类不默认继承超类的构造方法。 构造方法自动继承子类新加的属性都有默认值的前提下: 可失败构造方法init? 枚举可以定义失败的构造方法,根据参数选择是否能构造出一个成员。enum TemperatureUnit { case Kelvin,Celsius,Fahrenheit init?(symbol: Character) { switch symbol { case "K": self = .Kelvin case "C": self = .Celsius case "F": self = .Fahrenheit default: return nil } } } 枚举自动获得的可以失败构造方法获得条件:枚举成员有原始值 类的可以失败的构造方法值类型的可失败构造方法可以在构造方法的任意时刻出发构造失败,但是对于类就不行了。类的构造方法要出发构造失败,需要在自身的所有存储属性被赋值了初始值而且调用了其他构造方法之后才能进行。 可以失败构造方法的传递可以失败构造方法可以调用不可失败构造方法,但这样会导致构造结果的不确定性。 重写可以失败的构造方法可失败的构造方法可以被重写为不可失败的构造方法,但不能再引用超类的可失败构造方法了。 init!可失败构造方法init!和init?可以相互调用,相互重写。 必须构造方法required修饰符标记的构造方法叫必须构造方法,所有子类必须要有。 通过闭包和函数给属性设置默认值可以用闭包和函数给属性设置默认值 几种构造方法释义
本章思维导图(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |