今天只有中午看了一会。看到150多页了,基本理解了swift的构造过程。
下午给xcode装了个vim的插件,xvim,似乎还挺不错的。
便利构造器。便利构造器语法:
convenience init() {….
指定构造器和便利构造器实战:
子类不会默认继承父类的构造器。但是如果条件可以满足,父类构造器可以被自动继承。
如果子类提供了所有父类指定构造器的实现,不管是继承来的还是通过自定义实现的,它将自动继承所有父类的便利构造器。
注意:子类可以通过部分满足的方式,使用子类的便利构造器来实现父类的指定构造器。
class Food {
var name: String
init(name: String) {
self.name = name
}
convenience init() {
self.init(name: "[Unnamed]")
}
}
let nameMead = Food(name: "Bacon")
class RecipeIngredient: Food {
var quantity: Int
init(name: String, quantity: Int) {
self.quantity = quantity
super.init(name: name)
}
override convenience init(name: String) {
self.init(name: name, quantity: 1)
}
}
var myFood = RecipeIngredient() //默认构造器被继承,因为子类已实现父类的全部指定构造器,默认构造器调用init(name: String) -> super.init()
print(myFood.quantity)
print(myFood.name)
class ShoppingListItem: RecipeIngredient {
var purchased = false
var description: String {
return "\(quantity) * \(name.lowercaseString)"
}
}
let shoppItem = ShoppingListItem()
print(shoppItem.description)
由于第三个类为它自己引入的所有属性都提供了默认值,并且没有定义构造器,它将自动继承所有父类中的指定构造器和便利构造器。
ShoppingListItem.init() -> (继承) RecipeIngredient.init() -> (继承) Food.init()(convenience)
Foo.init() -> (调用) self.init(name: String) 由于init(name: String)在RecipeIngredient中被重写,因此调用 RecipeIngredient.init(name: String) -> RecipeIngredient.init(name: String, quantity: Int) -> Foo.init(name: String)。
晚上看了一晚上的锤子手机发布,木有看书。
发布会木有啥子惊喜,乏善可陈。
还是祝福一下老罗吧。有梦想而且偏执的人,实在太少了。