构造函数是一种特殊的函数,主要用来在创建兑现是初始化对象,为对象的属性设置初始值也就是OC中的init方法。
1.构造函数基础
Swift中的构造函数是用来对类型实例化的,它可以再实例化过程中给所有的存储型属性设置初始值,为程序提供必要的准备并执行初始化任务。下面是示例代码:
class Person: NSObject {
var name:String
var age:Int
override init() {
name = "汪小喵"
age = 18
super.init()
}
}
let person = Person()
print(person.name)
在这里,我们看到Swift和OC不同的地方是,在OC中我们需要先对父类进行初始化,而在这里,我们先对自己初始化,再初始化父类。
2.重载构造函数
在一个类中可以定义多个构造函数,以便提供不公初始化的方法,供用户选用。这些构造函数具有相同的名字,而参数的个数、名称或类型不相同,这称为构造函数的重载。
class Person: NSObject {
var name:String
var age:Int
init(name:String,age:Int){
self.name = name
self.age = age
super.init()
}
}
let person = Person(name: "汪小喵", age: 20)
print(person.name)
如果重写了构造函数,系统默认提供的构造函数就不能再被访问
3.指定构造函数与便利构造函数
指定构造函数是类中最主要的构造函数。一个指定构造函数将初始化类中提供的所有属性,并根据继承链往上调用父类的构造函数来实现父类的初始化。
init(参数) {
// 声明
}
便利构造函数是类中比较次要的、辅助性的构造函数。可以定义便利构造函数来调用同一个类中的指定构造函数,并为其参数提供默认值,也可以定义便利构造器来创建一个特殊用途或特定输入值的实例。
convenience init (参数) {
// 声明
}
class Person {
var name:String
init(name:String) { // 指定构造函数
self.name = name
}
convenience init() { // 便利构造函数
self.init(name: "汪小喵")
}
}
let person1 = Person()
let person2 = Person(name: "喵喵")
print(person1.name, person2.name)