IDE:Xcode Version7.3.1

指定构造器:

  1>名字为init的方法前没有前缀(子类重写时有override除外),

  2>一个类中至少有一个指定构造器,其必须初始化类中的所有实例存储属性

便利构造器:

  1>前缀为convenience的init方法,便利构造器属于次要的,辅助性的构造器.

  2>便利构造器必须调用同一个类中的其他构造器完成其初始化.

  3>只有类中才有便利构造器,枚举结构体中是没有的.

构造器链:(即构造器之间的调用)

  1>指定构造器总是向上调用父类的构造器(如果有父类)

  2>便利构造器总是横向调用当前类的其他构造器

  3>构造器链的最终节点一定是父类的指定构造器(如果有父类)

         

    

  

class Fruit{
var name:String
var weight:Double
  //定义指定构造器 最少一个且这一个要负责初始化勒种所有的实例存储属性
init(name:String){//①
self.name = name
self.weight = 0.0
}
//定义便利构造器
convenience init(name:String,weight:Double){//②
//调用本类中的①号指定构造器
self.init(name:name)
self.weight = weight
}
//定义另一个便利构造器 有外部参数
convenience init(n name:String,w weight:Double){//③
//调用本类的②号便利构造器
self.init(name:name)
}
} class Apple:Fruit{
var color:String
init(name:String, weight:Double, color:String){//④
    //指定构造器必须先向上调用父类构造器,然后才能对继承得到的属性赋值
  //  self.name = "123"//会报错,因为还没有调用父类的构造器
// print("color:\(self.color)")//报错 因为还没有初始化
self.color = color
print("color:\(self.color)")//初始化了 ok了
//子类的指定构造器必须调用父类的指定构造器,此处调用父类①号构造器
super.init(name: name)
self.weight = weight
}
init(){//⑤
//指定构造器必须先初始化当前类中定义的实例存储属性(子类的独有属性),然后才能向上调用父类构造器
self.color = ""//这一行如果写在super.init(name:"")后面就会报错
//子类指定构造器必须调用父类的指定构造器,此处调用父类①号构造器
super.init(name: "")
self.weight = 0.0
}
//定义一个便利构造器
convenience init(name:String,color:String){//⑥
//调用本类中④号指定构造器
self.init(name:name,weight:0.0,color:color)
}
//定义另一个便利构造器
convenience init(n name:String,c color:String){//⑦
//调用本类中⑥便利构造器
self.init(name:name,color:color)
}
}

Swift构造器链的更多相关文章

  1. Swift中的便利构造器和构造器链

    import UIKit // 1.一个类中至少有一个指定构造器, 其必须负责初始化类中所有的实例存储属性 // 2.便利构造器属于次要的, 辅助性的构造器 // 3.类中可以不定义便利构造器, 便利 ...

  2. 学习Swift -- 构造器(下)

    构造器(下) 可失败的构造器 如果一个类,结构体或枚举类型的对象,在构造自身的过程中有可能失败,则为其定义一个可失败构造器,是非常有必要的.这里所指的“失败”是指,如给构造器传入无效的参数值,或缺少某 ...

  3. 学习Swift -- 构造器(中)

    构造器(中) 值类型的构造器代理 构造器可以通过调用其它构造器来完成实例的部分构造过程.这一过程称为构造器代理,它能减少多个构造器间的代码重复. 构造器代理的实现规则和形式在值类型和类类型中有所不同. ...

  4. Swift构造器(Initializer)与析构器(Deinitializer)

    为了初始化结构体和类等类型的实例属性. 默认构造器 struct Fahrenheit { var temperature: Doubleinit(){ temperature = 32.0 } } ...

  5. Swift构造器重载

    与函数一样,方法也存在重载,其重载的方式与函数一致.那么作为构造器的特殊方法,是否也存在重载呢?答案是肯定的.一.构造器重载概念Swift中函数重载的条件也适用于构造器,条件如下:函数有相同的名字:参 ...

  6. 学习Swift -- 可选链

    可空链式调用 可空链式调用是一种可以请求和调用属性.方法及下标的过程,它的可空性体现于请求或调用的目标当前可能为空(nil).如果可空的目标有值,那么调用就会成功:如果选择的目标为空(nil),那么这 ...

  7. 学习Swift -- 构造器(上)

    构造器(上) 构造过程是为了使用某个类.结构体或枚举类型的实例而进行的准备过程.这个过程包含了为实例中的每个存储型属性设置初始值和为其执行必要的准备和初始化任务. 构造过程是通过定义构造器(Initi ...

  8. Swift 可选链-备

    在Swift程序表达式中会看到问号(?)和感叹号(!),它们代表什么含义呢?这些符号都与可选类型和可选链相关,下面来看看可选链. 可选链: 类图: 它们之间是典型的关联关系类图.这些类一般都是实体类, ...

  9. Swift 可选链

    可选链(Optional Chaining)是一种可以请求和调用属性.方法和子脚本的过程,用于请求或调用的目标可能为nil. 可选链返回两个值: 如果目标有值,调用就会成功,返回该值 如果目标为nil ...

随机推荐

  1. 9、select 语句

    基础语句 select * from tb1; select * from tb1 limit 3; select name,age from tb1; select name,age from tb ...

  2. 接口测试:添加cookie以及身份验证

    添加cookie以及身份验证的接口文档: cookie:存放在本地的一个键值对 session:存放在服务端的一个键值对 学生金币充值接口文档: 一.使用postman进行测试 由于进行学生金币充值操 ...

  3. SpringMVC 的初理解

    项目中用到了jetty,springboot两种构建服务器的方式,jetty是一种嵌入式的方式,部署启动都很灵活,springboot最大的优点就是很多配置文件都自己集成好了,虽然用了这么多好的框架, ...

  4. python模块之——tqdm(进度条)

    from tqdm import tqdm for i in tqdm(range(10000)): """一些操作""" pass 效果: ...

  5. P4168 [Violet]蒲公英 区间众数

    $ \color{#0066ff}{ 题目描述 }$ 在乡下的小路旁种着许多蒲公英,而我们的问题正是与这些蒲公英有关. 为了简化起见,我们把所有的蒲公英看成一个长度为n的序列 \((a_1,a_2.. ...

  6. leetcode-665-Non-decreasing Array

    题目描述: Given an array with n integers, your task is to check if it could become non-decreasing by mod ...

  7. MySql 的操作日志 历史记录

    如何查看mysql数据库操作记录日志 1.首先确认你日志是否启用了mysql>show variables like 'log_bin'. 2.如果启用了,即ON,那日志文件就在mysql的安装 ...

  8. css属性详解和浮动

    一.CSS属性组成和作用 属性:属性值 1)每个css样式都必须由两部分组成:选择符和声明 注:声明又包括属性和属性值 2)css属性:属性是指定选择符具有的属性,他是css的核心,css2共有150 ...

  9. 高阶篇:4.2.3)DFMEA现有设计:预防控制与探测控制

    本章目的:在现有设计中,明确预防控制与探测控制的定义和手段. 1.现有控制的填写部位: 2.现行设计控制(h)定义: 作为设计过程的一部分,现行设计控制是已经实施或承诺的活动,它将确保设计充分考虑设计 ...

  10. 2019.4.4 盒模型&定位&浮动

    盒模型 盒模型 除了图片表单元素之外,基本所有标签都可以看做一个盒子 盒模型的要素 父子关系之间用padding 兄弟关系之间用margin margin padding border 后面跟的值的顺 ...