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

 

构造函数作为一种特殊方法,也可以重载。

Swift中构造函数可以多个,他们参数列表和返回值可以不同,这些构造函数构成重载。

示例代码如下:

class Rectangle {var width: Doublevar height: Doubleinit(width: Double, height: Double) {self.width   = widthself.height  = height}init(W width: Double,H height: Double){  self.width   = widthself.height  = height}init(length: Double) {    self.width   = lengthself.height  = length}init() {  self.width   = 640.0self.height  = 940.0}}var rectc1 =Rectangle(width: 320.0, height: 480.0)
print("长方形:\(rectc1.width) x\(rectc1.height)")var rectc2 = Rectangle(W: 320.0, H: 480.0)
print("长方形:\(rectc2.width) x\(rectc2.height)")var rectc3 =Rectangle(length: 500.0)
print("长方形3:\(rectc3.width) x\(rectc3.height)")var rectc4 = Rectangle()
print("长方形4:\(rectc4.width) x\(rectc4.height)")

构造函数代理

为了减少多个构造函数间的代码重复,在定义构造函数时,可以通过调用其他构造函数来完成实例的部分构造过程,这个过程称为构造函数代理。构造函数代理在结构体和类中使用方式是不同,先介绍结构体中构造函数代理。

将上一节的示例修改如下:

struct Rectangle {var width: Doublevar height: Doubleinit(width: Double, height: Double) {self.width   = widthself.height  = height}init(W width: Double,H height: Double){  self.width   = widthself.height  = height}init(length: Double) {                    //调用了self.init语句self.init(W: length, H: length)}init() {                              //调用了self.init语句self.init(width: 640.0, height: 940.0)}}var rectc1 =Rectangle(width: 320.0, height: 480.0)
print("长方形:\(rectc1.width) x\(rectc1.height)")var rectc2 = Rectangle(W: 320.0, H: 480.0)
print("长方形:\(rectc2.width) x\(rectc2.height)")var rectc3 =Rectangle(length: 500.0)
print("长方形3:\(rectc3.width) x\(rectc3.height)")var rectc4 = Rectangle()
print("长方形4:\(rectc4.width) x \(rectc4.height)")

将Rectangle声明为结构体类型,其中也有4个构造函数重载。

这种在同一个类型中通过self.init语句进行调用当前类型其它构造函数,其它构造函数被称为构造函数代理。

类构造函数横向代理

由于类有继承关系,类构造函数代理比较复杂,分为横向代理和向上代理。

  • 横向代理类似于结构体类型构造函数代理,发生在同一类内部,这种构造函数称为便利构造函数(convenience initializers)。

  • 向上代理发生在继承情况下,在子类构造过程中要先调用父类构造函数,初始化父类的存储属性,这种构造函数称为指定构造函数(designated initializers)。

将上面的示例修改如下:

class Rectangle {var width: Doublevar height: Doubleinit(width: Double, height: Double){    self.width   = widthself.height  = height}init(W width: Double,H height: Double){      self.width   = widthself.height  = height}convenience init(length: Double) {            self.init(W: length, H: length)}convenience init() {                      self.init(width: 640.0, height: 940.0)}}var rectc1 =Rectangle(width: 320.0, height: 480.0)
print("长方形:\(rectc1.width) x\(rectc1.height)")var rectc2 = Rectangle(W: 320.0, H: 480.0)
print("长方形:\(rectc2.width) x\(rectc2.height)")var rectc3 =Rectangle(length: 500.0)
print("长方形3:\(rectc3.width) x\(rectc3.height)")var rectc4 = Rectangle()
print("长方形4:\(rectc4.width) x\(rectc4.height)")

将Rectangle声明为类,其中也有4个构造函数重载。

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

《从零开始学Swift》学习笔记(Day 39)——构造函数重载相关推荐

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

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

  2. find函数matlab_从零开始的matlab学习笔记——(39)find函数

    matlab应用--求极限,求导,求积分,解方程,概率统计,函数绘图,三维图像,拟合函数,动态图,傅里叶变换,随机数,优化问题....更多内容尽在个人专栏:matlab学习 上一节我们说了说matla ...

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

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

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

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

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

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

  6. 关东升的《从零开始学Swift》3月9日已经上架

    大家一直期盼的<从零开始学Swift>于3月9日已经上架,它是关东升老师历时8个月的呕心沥血所编著,全书600多页,此本书基于Swift 2.x,通过大量案例全面介绍苹果平台的应用开发.全 ...

  7. 深度学习笔记(39) Anchor Boxes

    深度学习笔记(39) Anchor Boxes 1. 一个格子多个对象检测问题 2. Anchor box 3. 对象形状交并比 3. 一个格子一个对象检测问题 4. 额外的细节 5. Anchor ...

  8. swift学习笔记《5》- 实用

    title: swift学习笔记<5>- 实用 date: 2016-09-21 21:39:00 categories: 学习笔记 Swift学习 tags: Swift 1.setVa ...

  9. 【从零开始学深度学习编译器】十三,如何在MLIR里面写Pass?

    [GiantPandaCV导语]这篇文章是学习了比较久然后按照自己的理解步骤重新总结了下来,主要是MLIR Toy Tutorials第3,4篇文章的内容.这里主要讲解了如何在MLIR中自定义Pass ...

  10. 动手学深度学习笔记3.4+3.5+3.6+3.7

    系列文章目录 动手学深度学习笔记系列: 动手学深度学习笔记3.1+3.2+3.3 文章目录 系列文章目录 前言 一.softmax回归 1.1 分类问题 1.2 网络架构 1.3 全连接层的参数开销 ...

最新文章

  1. 用python写一个记账小程序_python实现日常记账本小程序
  2. echart 折线图设置y轴单位_如何让echarts中y轴的单位位于数值的右上角
  3. 21行代码AC——例题5-2 Ducci序列(Ducci Sequence,UVa1594)——解题报告
  4. 我们靠什么赢得这个时代
  5. 淘宝万亿级海量交易订单存储在哪?
  6. 【Android开发坑系列】之PopupWindow
  7. Spring框架学习笔记02:初探Spring——利用组件注解符精简Spring配置文件
  8. java如何多表断网,java Web如何离线使用并进行数据同步
  9. 硬盘双击无法打开是咋回事
  10. cannot run program “google-chrome“: error=2, 没有那个文件或目录
  11. [转] 关于闰年的判断方法
  12. Swiper 触屏滑动切换
  13. 使用批处理文件,自动设置计算机IP地址
  14. 黄山旅游自助攻略住宿行程路线篇
  15. Litestar 4D:道路照明
  16. python写文件byte_如何将bytelist写入Python文件?
  17. 业余无线电通信_如何办理业余无线电台执照
  18. 计算机学院运动会加油,学校运会加油稿
  19. rm -rf 真是删库跑路的一把好手
  20. 阿里巴巴国际站新店铺3个月的成果

热门文章

  1. 局域网arp欺骗病毒查找预防方法(1)
  2. 磁盘阵列 (RAID)简介
  3. 我的Linux系统的一些截图 之二
  4. 通过经典题目来理解多种闭包实现方式
  5. C++ - 虚基类、虚函数与纯虚函数
  6. [原创]数论个人模板
  7. mysql 5.6 之 GTID 复制介绍
  8. mysql : 常用管理命令
  9. OSChina 周六乱弹 —— 能胖出腹肌来
  10. 移动端测试===adb shell top命令解释