1、继承:
class SomeClass: SomeSuperclass {
// 这里是子类的定义
}
子类重写父类的方法、属性等等需要添加关键字: override
override?func?makeNoise()?{
print("Choo Choo")
}
override var description: String {
return super.description + " in gear \(gear)"
}
防止重写: 不允许重写的属性和方法前使用final 修饰
? ?如果整个类都不允许重写则在class 前面添加final
2、构造:
构造过程是使用类、结构体或枚举类型的实例之前的准备过程。在新实例使用前有个过程是必须的,它包括设置实例中每个存储属性的初始值和执行其他必须的设置或构造过程。
init() {
// 在此处执行构造过程
}
struct Rect {
var origin = Point()
var size = Size()
init() {}
init(origin: Point, size: Size) {
self.origin = origin
self.size = size
}
init(center: Point, size: Size) {
let originX = center.x - (size.width / 2)
let originY = center.y - (size.height / 2)
self.init(origin: Point(x: originX, y: originY), size: size)
}
}
便利构造器:使用关键字convenience 修饰
class Food {
var name: String
init(name: String) {
self.name = name
}
convenience init() {
self.init(name: "[Unnamed]")
}
}
必要构造器:
在类的构造器前添加?required ?修饰符表明所有该类的子类都必须实现该构造器
class SomeClass { ? ? required init() { ? ? ? ? // 构造器的实现代码 ? ? } }
3、析构:
析构器只适用于类类型,当一个类的实例被释放之前,析构器会被立即调用。析构器用关键字?deinit ?来标示,类似于构造器要用?init ?来标示
Swift 会自动释放不再需要的实例以释放资源,Swift 通过自动引用计数(ARC)处理实例的内存管理。通常当你的实例被释放时不需要手动地去清理。但是,当使用自己的资源时,你可能需要进行一些额外的清理。例如,如果创建了一个自定义的类来打开一个文件,并写入一些数据,你可能需要在类实例被释放之前手动去关闭该文件。
class Player {
var coinsInPurse: Int
init(coins: Int) {
coinsInPurse = Bank.distribute(coins: coins)
}
func win(coins: Int) {
coinsInPurse += Bank.distribute(coins: coins)
}
deinit {
Bank.receive(coins: coinsInPurse)
}
}
|