Ringkasan, Sistem Pembayaran
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Swift di Coddy. Pelajaran 31 dari 57.
Tantangan
SulitRancang 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
1Class dan Object
Bekerja dengan FileMendefinisikan ClassMethod dan selfInitializerClass adalah ReferensiUlasan: Kartu Perpustakaan4Enkapsulasi
Kontrol AksesHanya Bisa Dibaca dari LuarMelindungi StateInitializer yang Bisa GagalRangkuman: Rekening Bank7Polimorfisme dan Generik
PolimorfismeKonversi TipeFungsi GenerikTipe GenerikRangkuman: Kalkulator Bentuk2Struct dan Tipe Nilai
StructSemantik NilaiMethod yang Mengubah NilaiStruct atau classRangkuman, Item Inventaris11Proyek: Manajemen Perpustakaan
Buku dan AnggotaPeminjaman Buku3Properti Lebih Dalam
Properti TerhitungPengamat PropertiAnggota StatisEnum dengan MethodRangkuman: Catatan Suhu6Protokol
Mendefinisikan ProtokolTipe yang Mematuhi ProtokolEkstensi ProtokolProtokol sebagai TipeRingkasan, Sistem PembayaranLatihan sendiri: Playground Swift