Özet - Ödeme Sistemi
Coddy'nin Swift Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 31 / 57.
Görev
ZorProtokollerle 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
1Sınıflar ve Nesneler
Dosyalarla ÇalışmaSınıfları TanımlamaMetotlar ve selfBaşlatıcılarSınıflar ReferanstırTekrar - Kütüphane Kartı4Kapsülleme
Erişim DenetimiDışarıdan Salt OkunurDurumu KorumaBaşarısız Olabilen BaşlatıcılarTekrar - Banka Hesabı7Polimorfizm ve Generic'ler
PolimorfizmTür DönüşümüGeneric FonksiyonlarGeneric TürlerTekrar - Şekil Hesaplayıcı2Struct Yapıları ve Değer Türleri
Struct YapılarıDeğer SemantiğiDeğiştirici MetotlarStruct mı Class mıTekrar - Envanter Öğesi5Kalıtım
Alt sınıflarMetotları Geçersiz KılmaBaşlatıcılar ve superfinal ve HiyerarşilerTekrar - Çalışan Hiyerarşisi11Proje: Kütüphane Yönetimi
Kitaplar ve ÜyelerKitap Ödünç Alma3Özellikleri Derinlemesine İnceleme
Hesaplanan ÖzelliklerÖzellik GözlemcileriStatik ÜyelerMetotlu Enum'larTekrar - Sıcaklık Günlüğü6Protokoller
Protokolleri TanımlamaUyumlu TürlerProtokol UzantılarıTürler Olarak ProtokollerÖzet - Ödeme SistemiKendi başına pratik yap: Swift playground