Menu
CoddyTech

Ringkasan, Sistem Pembayaran

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Swift di Coddy. Pelajaran 31 dari 57.

challenge icon

Tantangan

Sulit

Rancang sistem pembayaran dengan protocol. PaymentMethod memerlukan name, fee(for amount: Int) -> Int, dan mutating func pay(_ amount: Int) -> Bool. Ekstensi protocol menyediakan total(for:) (jumlah ditambah biaya). Implementasikan Card (biaya 2% dibulatkan ke bawah, selalu berhasil, menghitung payments), Wallet (menyimpan balance, tanpa biaya, gagal jika totalnya lebih besar daripada saldo, jika tidak saldo dikurangi) dan GiftCard (menyimpan balance, tanpa biaya, membayar jika saldonya cukup: jika saldo terlalu kecil, pembayaran ditolak). Selesaikan checkout(_:with:), yang mencoba setiap method pembayaran sesuai urutan yang diberikan dan mengembalikan paid 100 with wallet (fee 0) untuk method pertama yang berhasil, atau declined jika tidak ada yang berhasil. Fungsi ini juga mengembalikan method yang telah diperbarui agar saldonya tetap terbawa ke pembelian berikutnya.

Kode yang disediakan membaca saldo wallet dan saldo gift card, lalu jumlah pembelian. Untuk setiap pembelian, kode mencoba gift card, wallet, lalu card secara berurutan dan mencetak hasilnya, lalu saldo akhirnya.

Tulis kodemu di PaymentMethod.swift, Card.swift, Wallet.swift, GiftCard.swift, dan Functions.swift. main.swift berisi kode input/output yang disediakan dan tidak boleh diedit.

Coba sendiri

// Kode input/output yang disediakan: biarkan apa adanya
var input: [String] = []
while let line = readLine() { input.append(line) }
var methods: [any PaymentMethod] = [GiftCard(balance: Int(input[1])!), Wallet(balance: Int(input[0])!), Card()]
for line in input.dropFirst(2) {
    let (result, updated) = checkout(Int(line)!, with: methods)
    methods = updated
    print(result)
}
for m in methods {
    if let g = m as? GiftCard { print("gift card left \(g.balance)") }
    if let w = m as? Wallet { print("wallet left \(w.balance)") }
    if let c = m as? Card { print("card payments \(c.payments)") }
}

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Playground Swift