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. webservice简单例子

    1.添加web服务. /// <summary> /// demo 的摘要说明 /// </summary> [WebService(Namespace = "htt ...

  2. 深入了解java虚拟机(JVM) 第三章 内存区域----堆空间

    一.堆的含义 jvm堆的区域主要是用来存放对象的实例,它的空间大小是JVM内存区域中占比重最大的,也是jvm最大的内存管理模块,最重要的是,这个区域是垃圾收集器主要管理的区域,这意味着我们在考虑垃圾回 ...

  3. OCP2018最新题库,052新题库及答案整理-25题

    25.Which is true about logical and physical database structures? (Choose the best answer) A. An undo ...

  4. “全栈2019”Java第七十一章:外部类访问静态内部类成员详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  5. JavaScript 实现用户点击图片放大

    JavaScript 实现用户点击图片放大 一.契机 情况是这样的,之前推荐朋友去建站.后面他专门写了一篇文章说如何实现 "用户点击图片实现放大效果",俺就好好 "拜读& ...

  6. IDEA通过Maven WebApp archetype 创建Spring boot项目骨架

    springboot项目资源: GitHub地址:https://github.com/TisFreedom/springbootdome.git 码云地址:https://gitee.com/Tis ...

  7. python学习,day3:集合的学习

    集合天生去重,另外集合非常便于两组数字的取交集,并集等计算 # coding=utf-8 # Author: RyAn Bi list_1 =[1,2,3,4,5,6,7] list_1 =set(l ...

  8. 【算法笔记】B1051 复数乘法

    题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805274496319488 思路: 难点在于对复数其他形式的认 ...

  9. P2472 [SCOI2007]蜥蜴

    传送门 求无法逃离的蜥蜴总数的最小值就是求最多逃离的蜥蜴总数 所以显然考虑最大流,一个流量的路径就相当于一只蜥蜴逃离的路径 发现每个位置有一个最大经过次数,所以把每个位置拆成两个点$x,y$,$x$ ...

  10. Linux之shell

    shell的中文意思是外壳. 通常在图形界面中对实际体验带来的差异不是不同发行版本的终端模拟器,而是shell这个壳. 壳在核外,shell里面的核就是linux内核. shell指的是:提供给使用者 ...