Schneller Schauspieler mit Probe

Feb 16 2023
.

actor BankAccount {
    private var balance: Int
    
    init(initialBalance: Int) {
        balance = initialBalance
    }
    
    func deposit(amount: Int) {
        balance += amount
    }
    
    func withdraw(amount: Int) -> Int {
        if balance >= amount {
            balance -= amount
            return amount
        } else {
            let available = balance
            balance = 0
            return available
        }
    }
}

func transfer(amount: Int, from: BankAccount, to: BankAccount) async {
    let available = await from.withdraw(amount: amount)
    to.deposit(amount: available)
}

let account1 = BankAccount(initialBalance: 100)
let account2 = BankAccount(initialBalance: 50)

Task.detached {
    await transfer(amount: 50, from: account1, to: account2)
    print("Transfer complete")
}

Task.detached {
    await transfer(amount: 75, from: account2, to: account1)
    print("Transfer complete")
}