原创文章,欢迎转载。转载请注明:关东升的博客

在构造函数中可以使用构造函数代理帮助完成部分构造工作。类构造函数代理分为横向代理和向上代理,横向代理只能在发生在同一类内部,这种构造函数称为便利构造函数。向上代理发生在继承的情况下,在子类构造过程中,要先调用父类构造函数初始化父类的存储属性,这种构造函数称为指定构造函数。

构造函数调用规则

Person和Student类示例:

class Person {var name: Stringvar age: Intfunc description() -> String {return "\(name) 年龄是: \(age)"}convenience init () {        //便利构造函数self.init(name: "Tony")self.age = 18}convenience init (name: String) {//便利构造函数self.init(name: name, age: 18)}init (name: String, age: Int){       //指定构造函数self.name = nameself.age  = age}
}class Student: Person {var school: Stringinit (name: String, age: Int,school: String) {       //指定构造函数self.school = schoolsuper.init(name: name, age: age)}convenienceoverride init (name: String,age: Int) {//便利构造函数self.init(name: name, age: age, school: "清华大学")}
}let student = Student()
print("学生: \(student.description())")

构造函数之间的调用形成了构造函数链,如图所示。

Swift限制构造函数之间的代理调用的规则有3条,如下所示。

  • 指定构造函数必须调用其直接父类的的指定构造函数。从图可见,Student中的④号指定构造函数调用Person中的③号指定构造函数。

  • 便利构造函数必须调用同一类中定义的其他构造函数。从图可见,Student中的⑤号便利构造函数调用同一类中的④号便利构造函数,Person中的①号便利构造函数调用同一类中的②号便利构造函数。

  • 便利构造函数必须最终以调用一个指定构造函数结束。从图可见,Student中的⑤号便利构造函数调用同一类中的④号指定构造函数,Person中的②号便利构造函数调用同一类中的③号指定构造函数。

欢迎关注关东升新浪微博@tony_关东升。
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
 
更多精品iOS、Cocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com
智捷课堂论坛网站:http://51work6.com/forum.php

《从零开始学Swift》学习笔记(Day 42)——构造函数调用规则相关推荐

  1. 从零开始学STM32(学习笔记——第三天)

    CSDN话题挑战赛第2期 参赛话题:学习笔记 参考文章: [教学文章]STM32内部重要功能全记录 [教学文章]STM32内部核心功能大揭秘 [教学文章]STM32内部重要功能全记录 框架:STM32 ...

  2. 【从零开始学深度学习编译器】十二,MLIR Toy Tutorials学习笔记一

    本笔记由学习MLIR Tutorials总结而成,欢迎批评指正. Chapter1: Toy语言和AST MLIR提供了一种Toy语言来说明MLIR的定义和执行的流程.Toy语言是一种基于张量的语言, ...

  3. 影像组学视频学习笔记(42)-影像组学特征提取问题解决过程复现、Li‘s have a solution and plan.

    作者:北欧森林 链接:https://www.jianshu.com/p/c3e6de2f79b3 来源:简书,已获转载授权 本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(42)主要 ...

  4. 关东升的《从零开始学Swift》即将出版

    大家好: 苹果2015WWDC大会发布了Swift2.0,它较之前的版本Swift1.x有很大的变化,所以我即将出版<从零开始学Swift><从零开始学Swift>将在< ...

  5. 关东升的《从零开始学Swift》

    这个博文是swift 2.0的,也是可以参考的 http://blog.csdn.net/tonny_guan/article/category/6139217 文章目录 [置顶] 关东升的<从 ...

  6. 影像组学视频学习笔记(41)-如何使用软件提取组学特征、Li‘s have a solution and plan.

    作者:北欧森林 链接:https://www.jianshu.com/p/72186eb3e395 来源:简书,已获授权转载 本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(41)主要 ...

  7. 影像组学视频学习笔记(37)-机器学习模型判断脑卒中发病时间(文献报告)、Li‘s have a solution and plan.

    作者:北欧森林 链接:https://www.jianshu.com/p/3e7a2c84288e 来源:简书,已获授权转载 RadiomicsWorld.com "影像组学世界" ...

  8. 影像组学视频学习笔记(23)-主成分析PCA、降维和特征筛选的区别、Li‘s have a solution and plan.

    本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(23)主要讲解: 主成分析PCA,影像组学降维和特征筛选的区别 0. PCA(Principal component analysis) ...

  9. 影像组学视频学习笔记(34)-使用3D Slicer软件提取影像组学特征、Li‘s have a solution and plan.

    作者:北欧森林 链接:https://www.jianshu.com/p/afcd06221ea4 来源:简书,已获授权转载 RadiomicsWorld.com "影像组学世界" ...

最新文章

  1. 动态语言的灵活性是把双刃剑 -- 以Python语言为例
  2. 你是怎样给下属分配工作
  3. html编辑器kindeditor我的使用方法 (转载)
  4. 博士申请 | 加拿大Mila实验室唐建教授招收深度学习方向博士生和实习生
  5. mysql分页查询limit_MySQL查询语句(where,group by,having,order by,limit)
  6. linux shell之find高级点的用法
  7. 用汇编写系统服务程序
  8. 基于heartbeat v1配置mysql和httpd的高可用双主模型
  9. Python异常处理 -跳过异常继续执行
  10. HTML中常用的列表标签
  11. JQuery AJAX 的表单提交
  12. 海思hi3798mv100刷linux,(JL)咪咕mg101_hi3798mv100盒子强刷第三方固件教程
  13. excel常用函数公式及技巧搜集4
  14. 如何快速删除某几页的页眉页脚
  15. pta中c语言编程问题答案,pta题库答案_浙大远程教育2015秋 程序设计基础C 求PTA实验代码题库liujiahai-C答案_淘题吧...
  16. js计算两个日期之间的时间差
  17. script ‘D:\pycharm\Student‘ not found
  18. java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar
  19. java毕业设计阿博图书馆管理系统(附源码、数据库)
  20. NBIOT 设备接入ONENET平台

热门文章

  1. mybatis工具类
  2. 二叉树中最大/最小深度与叶子数
  3. Rancher的简单部署和使用
  4. 解决文字与下划线重叠的问题
  5. cross-compile/交叉编译 适用于ARM的ko文件
  6. Java特性-Collection和Map
  7. 探索式软件测试—Exploratory Software Testing
  8. Java Swing界面编程(28)---复选框:JCheckBox
  9. Linux 小知识点
  10. The FLARE On Challenge