在一个类的实例被释放之前,析构函数被立即调用。用关键字 deinit 来标示析构函数。

###析构过程原理

  • 每个类最多只能有一个析构函数。析构函数不带任何参数,在写法上不带括号
  • 析构函数是在实例释放发生前一步被自动调用,不允许主动调用自己的析构函数
  • 子类继承了父类的析构函数,并且在之类析构函数实现的最后,父类的析构函数被自动调用

###析构函数操作

struct Bank {
    static var coinsInBank = 10_000
    static func vendCoins(var numberOfCoinsToVend: Int) -> Int {
          numberOfCoinsToVend = min(numberOfCoinsToVend, coinsInBank)
          coinsInBank -= numberOfCoinsToVend
         return numberOfCoinsToVend
    }
    static func receiveCoins(coins: Int) {
        coinsInBank += coins
    }
}

class Player {
    var coinsInPurse: Int
    init(coins: Int) {
        coinsInPurse = Bank.vendCoins(coins)
    }
    func winCoins(coins: Int) {
        coinsInPurse += Bank.vendCoins(coins)
    }
    deinit {
        Bank.receiveCoins(coinsInPurse)
    }
}

playerOne = nil
println("PlayerOne has left the game")
// 输出 "PlayerOne has left the game"
println("The bank now has \(Bank.coinsInBank) coins")
// 输出 "The bank now has 10000 coins"