首页 / IOS-SWIFT / Swift构造器重载
Swift构造器重载
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Swift构造器重载,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3572字,纯文字阅读大概需要6分钟。
内容图文
![Swift构造器重载](/upload/InfoBanner/zyjiaocheng/1135/7d0e7142d56c40b4bb9e4c41fe86f8fa.jpg)
与函数一样,方法也存在重载,其重载的方式与函数一致。那么作为构造器的特殊方法,是否也存在重载呢?答案是肯定的。
一、构造器重载概念
Swift中函数重载的条件也适用于构造器,条件如下:
函数有相同的名字;
参数列表不同或返回值类型不同,或外部参数名不同;
Swift中的构造器可以满足以下两个条件,代码如下:
- class Rectangle {
- var width : Double
- var height : Double
- init(width : Double, height : Double) { ①
- self.width = width
- self.height = height
- }
- init(W width : Double,H height : Double) { ②
- self.width = width
- self.height = height
- }
- init(length : Double) { ③
- self.width = length
- self.height = length
- }
- init() { ④
- self.width = 640.0
- self.height = 940.0
- }
- }
- var rectc1 = Rectangle(width : 320.0, height : 480.0) ⑤
- println("长方形:\(rectc1.width) x \(rectc1.height)")
- var rectc2 = Rectangle(W : 320.0, H : 480.0) ⑥
- println("长方形:\(rectc2.width) x \(rectc2.height)")
- var rectc3 = Rectangle(length: 500.0) ⑦
- println("长方形3:\(rectc3.width) x \(rectc3.height)")
- var rectc4 = Rectangle() ⑧
- println("长方形4:\(rectc4.width) x \(rectc4.height)")
上述代码第①~④行定义了4个构造器,其他是重载关系。从参数个数和参数类型上看,第①行和第②行的构造器是一样的,但是它们的外部参数名不同,所以在第⑤行调用的是第①行的构造器,第⑥行调用的是第②行的构造器。
第③行和第④行的构造器参数个数与第①行不同,所以在第⑦行调用的是第③行的构造器,第④行调用的是第⑧行的构造器。
二、值类型构造器代理
为了减少多个构造器间的代码重复,在定义构造器时,可以通过调用其他构造器来完成实例的部分构造过程,这个过程称为构造器代理。构造器代理在值类型和引用类型中使用方式不同,本节我们先介绍值类型构造器代理。
将上一节的示例修改如下:
- struct Rectangle {
- var width : Double
- var height : Double
- init(width : Double, height : Double) { ①
- self.width = width
- self.height = height
- }
- init(W width : Double,H height : Double) { ②
- self.width = width
- self.height = height
- }
- init(length : Double) { ③
- self.init(W : length, H : length)
- }
- init() { ④
- self.init(width: 640.0, height: 940.0)
- }
- }
- var rectc1 = Rectangle(width : 320.0, height : 480.0) ⑤
- println("长方形:\(rectc1.width) x \(rectc1.height)")
- var rectc2 = Rectangle(W : 320.0, H : 480.0) ⑥
- println("长方形:\(rectc2.width) x \(rectc2.height)")
- var rectc3 = Rectangle(length: 500.0) ⑦
- println("长方形3:\(rectc3.width) x \(rectc3.height)")
- var rectc4 = Rectangle() ⑧
- println("长方形4:\(rectc4.width) x \(rectc4.height)")
将Rectangle声明为结构体类型,其中也有4个构造器重载。在第③行和第④行的构造器中使用了self.init语句,self指示当前实例本身,init是本身的构造器,第③行的self.init(W : length, H : length)语句是在调用第②行定义的构造器,第④行的self.init(width: 640.0, height: 940.0)语句是在调用第①行定义的构造器。
这种在同一个类型中通过self.init语句进行调用就是我们说的构造器代理。
三、引用类型构造器横向代理
引用类型构造器代理就是类构造器代理。由于类有继承关系,类构造器代理比较复杂,分为横向代理和向上代理。
横向代理类似于值类型构造器代理,发生在同一类内部,这种构造器称为便利构造器(convenience initializers)。
向上代理发生在继承情况下,在子类构造过程中要先调用父类构造器,初始化父类的存储属性,这种构造器称为指定构造器(designated initializers)。
由于我们还没有介绍继承,因此本章只介绍横向代理。
将上一节的示例修改如下:
- class Rectangle {
- var width : Double
- var height : Double
- init(width : Double, height : Double) { ①
- self.width = width
- self.height = height
- }
- init(W width : Double,H height : Double) { ②
- self.width = width
- self.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) ⑤
- println("长方形:\(rectc1.width) x \(rectc1.height)")
- var rectc2 = Rectangle(W : 320.0, H : 480.0) ⑥
- println("长方形:\(rectc2.width) x \(rectc2.height)")
- var rectc3 = Rectangle(length: 500.0) ⑦
- println("长方形3:\(rectc3.width) x \(rectc3.height)")
- var rectc4 = Rectangle() ⑧
- println("长方形4:\(rectc4.width) x \(rectc4.height)")
将Rectangle声明为类,其中也有4个构造器重载。在第③行和第④行的构造器中使用了self.init语句,并且在构造器前面加上了convenience关键字,convenience表示便利构造器,这说明我们定义构造器是横向代理调用其他构造器。
第③行的self.init(W : length, H : length)语句是在横向调用第②行定义的构造器代理,第④行的self.init(width: 640.0, height: 940.0)语句是在横向调用第①行定义的构造器代理。
欢迎关注智捷iOS课堂微信公共平台
原文:http://www.cnblogs.com/iOS-Blog/p/3946797.html
内容总结
以上是互联网集市为您收集整理的Swift构造器重载全部内容,希望文章能够帮你解决Swift构造器重载所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。