Swift构造器链
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构造器链的更多相关文章
- Swift中的便利构造器和构造器链
import UIKit // 1.一个类中至少有一个指定构造器, 其必须负责初始化类中所有的实例存储属性 // 2.便利构造器属于次要的, 辅助性的构造器 // 3.类中可以不定义便利构造器, 便利 ...
- 学习Swift -- 构造器(下)
构造器(下) 可失败的构造器 如果一个类,结构体或枚举类型的对象,在构造自身的过程中有可能失败,则为其定义一个可失败构造器,是非常有必要的.这里所指的“失败”是指,如给构造器传入无效的参数值,或缺少某 ...
- 学习Swift -- 构造器(中)
构造器(中) 值类型的构造器代理 构造器可以通过调用其它构造器来完成实例的部分构造过程.这一过程称为构造器代理,它能减少多个构造器间的代码重复. 构造器代理的实现规则和形式在值类型和类类型中有所不同. ...
- Swift构造器(Initializer)与析构器(Deinitializer)
为了初始化结构体和类等类型的实例属性. 默认构造器 struct Fahrenheit { var temperature: Doubleinit(){ temperature = 32.0 } } ...
- Swift构造器重载
与函数一样,方法也存在重载,其重载的方式与函数一致.那么作为构造器的特殊方法,是否也存在重载呢?答案是肯定的.一.构造器重载概念Swift中函数重载的条件也适用于构造器,条件如下:函数有相同的名字:参 ...
- 学习Swift -- 可选链
可空链式调用 可空链式调用是一种可以请求和调用属性.方法及下标的过程,它的可空性体现于请求或调用的目标当前可能为空(nil).如果可空的目标有值,那么调用就会成功:如果选择的目标为空(nil),那么这 ...
- 学习Swift -- 构造器(上)
构造器(上) 构造过程是为了使用某个类.结构体或枚举类型的实例而进行的准备过程.这个过程包含了为实例中的每个存储型属性设置初始值和为其执行必要的准备和初始化任务. 构造过程是通过定义构造器(Initi ...
- Swift 可选链-备
在Swift程序表达式中会看到问号(?)和感叹号(!),它们代表什么含义呢?这些符号都与可选类型和可选链相关,下面来看看可选链. 可选链: 类图: 它们之间是典型的关联关系类图.这些类一般都是实体类, ...
- Swift 可选链
可选链(Optional Chaining)是一种可以请求和调用属性.方法和子脚本的过程,用于请求或调用的目标可能为nil. 可选链返回两个值: 如果目标有值,调用就会成功,返回该值 如果目标为nil ...
随机推荐
- django shortcut function
render() render(request, template_name, context=None, content_type=None, status=None, using=None) 必须 ...
- 903. Valid Permutations for DI Sequence
We are given S, a length n string of characters from the set {'D', 'I'}. (These letters stand for &q ...
- D. Magic Box(几何)
One day Vasya was going home when he saw a box lying on the road. The box can be represented as a re ...
- CRC循环冗余校验算法
现实中通信链路都不会是理想的,比特在传输的过程中可能会出现差错,0变成1,1变成0.这就叫做比特差错.因此为了保证数据传输的可靠性,在计算网络传输数据时,必须采用各种检验措施来处理比特差错.在数据链路 ...
- supervisor 使用
cat /etc/supervisord.conf https://www.cnblogs.com/yuzhoushenqi/p/6825204.html http://127.0.0.1:1001/ ...
- nginx高性能WEB服务器系列之九--nginx运维故障日常解决方案
nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...
- P1158 导弹拦截
P1158 导弹拦截 思路: 按每个点到第一个系统的距离排序,然后预处理出每个点及其之后的点到第二个系统的距离的最大值,再循环一遍枚举答案. 代码: #include <cstdio> ...
- python学习笔记1.3
温度转换实例 #TempConvert.pyTempStr = input("请输入带有符号的温度值: ")if TempStr[-1] in ['F', 'f']:C = (ev ...
- java架构师之路,享学课堂VIP课程视频下载
享学课堂并发编程:百度网盘 链接:https://pan.baidu.com/s/10O8oXC0yNRArUh3WKkXayg 提取码:o01s 更多视频获取方式请留言
- python之类与对象(1)
面向对象编程是最有效的软件编写方法之一.编写类时,定义一群对象都有的通用行为.基于类创建对象时,每个对象都自动具备这种通用行为,然后可以根据需要赋予每个对象的独特的个性. 1. 类与对象的语法规范 关 ...