《从零开始学Swift》学习笔记(Day 39)——构造函数重载
原创文章,欢迎转载。转载请注明:关东升的博客
构造函数作为一种特殊方法,也可以重载。
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)——构造函数重载相关推荐
- 从零开始学STM32(学习笔记——第三天)
CSDN话题挑战赛第2期 参赛话题:学习笔记 参考文章: [教学文章]STM32内部重要功能全记录 [教学文章]STM32内部核心功能大揭秘 [教学文章]STM32内部重要功能全记录 框架:STM32 ...
- find函数matlab_从零开始的matlab学习笔记——(39)find函数
matlab应用--求极限,求导,求积分,解方程,概率统计,函数绘图,三维图像,拟合函数,动态图,傅里叶变换,随机数,优化问题....更多内容尽在个人专栏:matlab学习 上一节我们说了说matla ...
- 【从零开始学深度学习编译器】十二,MLIR Toy Tutorials学习笔记一
本笔记由学习MLIR Tutorials总结而成,欢迎批评指正. Chapter1: Toy语言和AST MLIR提供了一种Toy语言来说明MLIR的定义和执行的流程.Toy语言是一种基于张量的语言, ...
- 关东升的《从零开始学Swift》
这个博文是swift 2.0的,也是可以参考的 http://blog.csdn.net/tonny_guan/article/category/6139217 文章目录 [置顶] 关东升的<从 ...
- 关东升的《从零开始学Swift》即将出版
大家好: 苹果2015WWDC大会发布了Swift2.0,它较之前的版本Swift1.x有很大的变化,所以我即将出版<从零开始学Swift><从零开始学Swift>将在< ...
- 关东升的《从零开始学Swift》3月9日已经上架
大家一直期盼的<从零开始学Swift>于3月9日已经上架,它是关东升老师历时8个月的呕心沥血所编著,全书600多页,此本书基于Swift 2.x,通过大量案例全面介绍苹果平台的应用开发.全 ...
- 深度学习笔记(39) Anchor Boxes
深度学习笔记(39) Anchor Boxes 1. 一个格子多个对象检测问题 2. Anchor box 3. 对象形状交并比 3. 一个格子一个对象检测问题 4. 额外的细节 5. Anchor ...
- swift学习笔记《5》- 实用
title: swift学习笔记<5>- 实用 date: 2016-09-21 21:39:00 categories: 学习笔记 Swift学习 tags: Swift 1.setVa ...
- 【从零开始学深度学习编译器】十三,如何在MLIR里面写Pass?
[GiantPandaCV导语]这篇文章是学习了比较久然后按照自己的理解步骤重新总结了下来,主要是MLIR Toy Tutorials第3,4篇文章的内容.这里主要讲解了如何在MLIR中自定义Pass ...
- 动手学深度学习笔记3.4+3.5+3.6+3.7
系列文章目录 动手学深度学习笔记系列: 动手学深度学习笔记3.1+3.2+3.3 文章目录 系列文章目录 前言 一.softmax回归 1.1 分类问题 1.2 网络架构 1.3 全连接层的参数开销 ...
最新文章
- 用python写一个记账小程序_python实现日常记账本小程序
- echart 折线图设置y轴单位_如何让echarts中y轴的单位位于数值的右上角
- 21行代码AC——例题5-2 Ducci序列(Ducci Sequence,UVa1594)——解题报告
- 我们靠什么赢得这个时代
- 淘宝万亿级海量交易订单存储在哪?
- 【Android开发坑系列】之PopupWindow
- Spring框架学习笔记02:初探Spring——利用组件注解符精简Spring配置文件
- java如何多表断网,java Web如何离线使用并进行数据同步
- 硬盘双击无法打开是咋回事
- cannot run program “google-chrome“: error=2, 没有那个文件或目录
- [转] 关于闰年的判断方法
- Swiper 触屏滑动切换
- 使用批处理文件,自动设置计算机IP地址
- 黄山旅游自助攻略住宿行程路线篇
- Litestar 4D:道路照明
- python写文件byte_如何将bytelist写入Python文件?
- 业余无线电通信_如何办理业余无线电台执照
- 计算机学院运动会加油,学校运会加油稿
- rm -rf 真是删库跑路的一把好手
- 阿里巴巴国际站新店铺3个月的成果