构造器的关键字是init,今天我们就谈谈这个init关键字,在创建类或者结构体时,必须为所有的存储属性设置初始值,我们可以在定义的时候直接设置默认值。或者在构造器中设置值。
实例存储的初始化大致分为如下几类:
- 定义实例存储属性时显式指定初始值。
- 实例存储属性的类型为可选类型,这样默认分配nil作为初始值
- 提供构造器为实例存储属性分配初始值
很明显,今天我们学习的是第三者
无参构造器
构造器后面括号里没有参数
struct Week
{
var desc:String=""
var info:String=""
init()
{
self.desc="周五"
self.info="这一天是程序员最开心的日子"
}
}
var week2=Week()
print(week2.desc)
print(week2.info)
有参构造器
struct Week
{
var desc:String=""
var info:String=""
init(desc:String,info:String)
{
self.desc=desc
self.info=info
}
}
var week=Week(desc: "周一", info:"上班的第一天,怀念周末的日子")
print(week.desc)
print(week.info)
有参取消无外部形参名
在参数前面加上 _ 来取消隐式的外部形参名
struct Week
{
var desc:String=""
var info:String=""
init()
{
self.desc="周五"
self.info="这一天是程序员最开心的日子"
}
init(_ desc:String, _ info:String)
{
self.desc=desc
self.info=info
}
}
var week1=Week("周一","上班的第一天,怀念周末的日子")
print(week1.desc)
print(week1.info)
构造器重载
上面我们定义了三个构造器,像这样的一个结构体或类里面包含多个构造器的,就构成了构造器重载。区分构造器重载的条件是:多个构造器的参数列表或者外部形参名必须不同。
上面三块代码整合到一块就构成了构造器重载,如下:
struct Week
{
var desc:String=""
var info:String=""
init()
{
self.desc="周五"
self.info="这一天是程序员最开心的日子"
}
init(desc:String,info:String)
{
self.desc=desc
self.info=info
}
init(_ desc:String, _ info:String)
{
self.desc=desc
self.info=info
}
}