对照Java学习Swift--构造过程(Initialization)

时间:2021-08-17 15:39:42

Swift和Java的构造器的功能差不多,但是在语法层面有些不同,都是为了实现实例的创建。
Swift构造方法是用init关键字来实现,Java使用跟类名一样的方法来实现,都没有返回值,但是Swift的可失败构造方法如果构建失败返回nil是个例外。
Swift的构造方法:

init() {
// 在此处执行构造过程
}

Java中的构造方法:

public Person(){
// 在此处执行构造过程
}

Swift和Java都有默认的构造函数,Swift的结构体还有逐一构造函数。
Swift包括指定构造器和便利构造器,默认的是指定构造函数,在前面加个convenience是便利构造函数,Java中则没有便利构造函数。

指定构造器将初始化类中提供的所有属性,并根据父类链往上调用父类的构造器来实现父类的初始化。

定构造器将初始化类中提供的所有属性,并根据父类链往上调用父类的构造器来实现父类的初始化。

便利构造器是类中比较次要的、辅助型的构造器。你可以定义便利构造器来调用同一个类中的指定构造器,并为其参数提供默认值。你也可以定义便利构造器来创建一个特殊用途或特定输入值的实例。

类的构造器代理规则

为了简化指定构造器和便利构造器之间的调用关系,Swift 采用以下三条规则来限制构造器之间的代理调用:

规则 1

指定构造器必须调用其直接父类的的指定构造器。

规则 2

便利构造器必须调用同一类中定义的其它构造器。

规则 3

便利构造器必须最终导致一个指定构造器被调用。

可失败构造器

在init关键字后面添加问号(init?)。
可失败构造器会创建一个类型为自身类型的可选类型的对象。你通过return nil语句来表明可失败构造器在何种情况下应该“失败”。

struct Animal {
let species: String
init?(species: String) {
if species.isEmpty { return nil }
self.species = species
}
}

先就学这么多,还没必要构造器等,到要用的时候在学吧,东西太多了。