Swfit-Deinitialization

 //*****************Deinitialization 反初始化***************
        // 关键字 denit
        // 在实类对象被销毁的时候, 会立刻调用 denit
        // 每个类对象都有 deinitializer 方法
        // denitializer 不需要传入任何参数
        // denitializer 在对象销毁前,自动被调用,不需要自己手动调用
        // 子类的denitializer 继承于 父类的 denitializer
        // 子类的 denitializer 调用时 父类的 denitializer 会自动调用
        // 无论子类是否实现 denitializer, 在对象销毁前 都会调用父类的 denitializer
        // denitializer 调用时 对象还没有销毁, 可以获取所有的属性,并对属性进行处理
        
        class Bank{
            // 银行存款
            static var coinsInBank = 10_000
            // 取出
            static func distribute(coins numberOfCoinsRequested: Int) -> Int{
                
                let numberOfCoinsToVend = min(numberOfCoinsRequested,coinsInBank)
                
                coinsInBank -= numberOfCoinsToVend
                
                return numberOfCoinsToVend
                
            }
            //存入
            static func receive(coins: Int){
                
                coinsInBank += coins
                
            }
            
        }
        
        class Player{
            // 玩家钱包
            var coinsInPurse: Int
            // 初始化 coins: 银行取出的金币
            init(coins: Int){
                
                coinsInPurse = Bank.distribute(coins: coins)
                
            }
            //赢得的金币 装入钱包
            func win(coins:Int){
                
                coinsInPurse += Bank.distribute(coins: coins)
                
            }
            // 反初始化
            deinit {
                // 银行收回 金币
                Bank.receive(coins: coinsInPurse)
                
            }
            
        }
    
        var playerone: Player? = Player(coins: 100)
        
        print("a new player has joined the game with \(playerone!.coinsInPurse) coins")
        //a new player has joined the game with 100 coins
        print("There are now \(Bank.coinsInBank) coins left in the bank")
        //There are now 9900 coins left in the bank
        playerone!.win(coins: 2_000)
        
        print("PlayerOne won 2000 coins & now has \(playerone!.coinsInPurse) coins)")
        
        playerone = nil
        
        print("PlayerOne has left the game")
        
        print("The bank now has \(Bank.coinsInBank) coins")
        //The bank now has 10000 coins
        

你可能感兴趣的:(Swfit-Deinitialization)