标签:style http io ar color os 使用 sp java
Swift 的构造过程分为两个阶段:
在构造的过程中, Swift 会进行四种安全检查。
指定构造器必须保证它所在类引入的所有属性都必须先初始化完成,之后才能将其它构造任务向上代理给父类中的构造器。
比如下面这段代码就是错误的:
class Food {
var name: String
init(name: String) {
self.name = name
}
}
class RecipeIngredient: Food {
var quantity: Int
init(name: String, quantity: Int) {
super.init(name: name) // ERROR!
self.quantity = quantity
}
}
指定构造器必须先向上代理调用父类构造器,然后再为继承的属性设置新值。如果没这么做,指定构造器赋予的新值将被父类中的构造器所覆盖。
比如下面这段代码就是错误的:
class Food {
var name: String
init(name: String) {
self.name = name
}
}
class RecipeIngredient: Food {
override init(name: String) {
self.name = "WHY" // ERROR!
super.init(name: name)
}
}
便利构造器必须先代理调用同一类中的其它构造器,然后再为任意属性赋新值。如果没这么做,便利构造器赋予的新值将被同一类中其它指定构造器所覆盖。
比如下面这段代码就是错误的:
class Food {
var name: String
init(name: String) {
self.name = name
}
}
class RecipeIngredient: Food {
var quantity: Int
init(name: String, quantity: Int) {
self.quantity = quantity
super.init(name: name)
}
override convenience init(name: String) {
quantity = 2 // ERROR!
self.init(name: name, quantity: 1)
}
}
构造器在第一阶段构造完成之前,不能调用任何实例方法、不能读取任何实例属性的值,也不能引用self的值。
比如下面这段代码就是错误的:
class Food {
var name: String
init(name: String) {
self.name = name
}
}
class RecipeIngredient: Food {
var quantity: Int
init(name: String, quantity: Int) {
self.quantity = quantity
println(self.name) // ERROR!
super.init(name: name)
}
override convenience init(name: String) {
self.init(name: name, quantity: 1)
}
}
每个类最多只能有一个析构函数。析构函数不带任何参数,也没有括号:
deinit {
// 执行析构过程
}
子类继承了父类的反初始化函数,先释放子类再释放父类。
最近公司项目有点忙,先这么多了。
标签:style http io ar color os 使用 sp java
原文地址:http://blog.csdn.net/pleasecallmewhy/article/details/41549417