Menu
Coddy logo textTech

Özet - Ödeme Sistemi

Coddy'nin Swift Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 31 / 57.

challenge icon

Görev

Zor

Protokollerle bir ödeme sistemi tasarlayın. PaymentMethod, name, fee(for amount: Int) -> Int ve mutating func pay(_ amount: Int) -> Bool gerektirir. Bir protokol uzantısı, total(for:) (tutar artı ücret) sağlar. Card uygulayın (ücret aşağı yuvarlanmış %2'dir, her zaman başarılı olur ve payments sayısını tutar), Wallet uygulayın (saklanan bir balance, ücret yoktur; toplam bakiyeden fazlaysa başarısız olur, aksi takdirde bakiyeyi azaltır) ve GiftCard uygulayın (saklanan bir balance, ücret yoktur; karşılayabildiği kadarını öder: bakiye yetersiz olduğunda işlemi reddeder). Her ödeme yöntemini verilen sırayla deneyen ve başarılı olan ilk yöntem için paid 100 with wallet (fee 0) döndüren ya da hiçbiri başarılı olmadığında declined döndüren checkout(_:with:) işlevini tamamlayın. Ayrıca, bakiyeler satın alımlar arasında aktarılabilsin diye güncellenmiş yöntemleri de döndürür.

Sağlanan kod bir cüzdan bakiyesi ve bir hediye kartı bakiyesi, ardından da satın alma tutarlarını okur. Her satın alma için hediye kartını, cüzdanı ve kartı bu sırayla dener ve sonucu, ardından son bakiyeleri yazdırır.

Kodunuz PaymentMethod.swift, Card.swift, Wallet.swift, GiftCard.swift ve Functions.swift dosyalarına gelecek. main.swift sağlanan giriş/çıkış kodunu içerir ve düzenlenemez.

Kendin dene

// Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
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)") }
}

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Swift playground