Meneruskan Error
Termasuk bagian Logika dan Alur dalam perjalanan Swift di Coddy. Pelajaran 47 dari 56.
Fungsi yang melempar error dapat memanggil fungsi lain yang melempar error. Error akan merambat ke do/catch terdekat secara otomatis, tanpa perlu melempar ulang secara manual.
enum AuthError: Error { case badUser, badPass }
func loadUser(_ name: String) throws -> String {
if name.isEmpty { throw AuthError.badUser }
return name
}
func login(_ name: String, _ pass: String) throws -> String {
let u = try loadUser(name) // meneruskan error
if pass.count < 4 { throw AuthError.badPass }
return "hello \(u)"
}
do {
print(try login("", "abcd"))
} catch AuthError.badUser {
print("missing user")
} catch AuthError.badPass {
print("weak password")
}Baca dari atas ke bawah: login memanggil loadUser dengan try. Jika loadUser melempar error, error tersebut melewati isi login dan sampai ke catch di bagian luar. Kamu menulis setiap langkah agar langsung gagal dan membiarkan pemanggil memutuskan apa yang harus dilakukan.
Tantangan
SedangBuat pipeline kecil dengan dua langkah yang dapat melempar error.
Definisikan StepError: Error dengan dua kasus: negative, tooBig.
Definisikan parseSafe(_ s: String) throws -> Int: lempar .negative jika bilangan bulat yang diuraikan kurang dari 0, jika tidak, kembalikan nilainya. (Anggap input berhasil diuraikan, kamu sudah menanganinya di tempat lain.)
Definisikan capStrict(_ n: Int) throws -> Int: lempar .tooBig jika n > 100, jika tidak, kembalikan n.
Definisikan processStep(_ s: String) throws -> Int yang memanggil parseSafe lalu capStrict, dan membiarkan error apa pun merambat.
Baca satu baris input: list string yang dipisahkan koma. Untuk setiap string, panggil processStep dalam do/catch dan cetak satu baris:
ok: <n>jika berhasilnegativejikaparseSafemelempar errortoo bigjikacapStrictmelempar error
Untuk input 10,-1,200,42, outputnya adalah:
ok: 10
negative
too big
ok: 42Coba sendiri
let parts = readLine()!.components(separatedBy: ",")
// TODO: buat enum StepError; parseSafe; capStrict; processStep;
// untuk setiap bagian, gunakan do/try pada processStep, catch setiap cabang, lalu print
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Mendalami string
Jumlah dan indeksHuruf besar, huruf kecil, dan hapus spasiMencari dalam stringMemisahkan dan menggabungkanMengganti substringUlasan: Memeriksa nama pengguna4set
Membuat setGabungan dan IrisanSelisih dan Selisih SimetrisHimpunan Bagian dan Himpunan SupersetRingkasan: Filter Tag7Proyek: Pelacak Kebiasaan
Gambaran Umum ProyekTandai Selesai2Rentang dan Langkah
Rentang Tertutup vs Setengah TerbukaLangkahMetode RentangRentang dalam SwitchRangkuman: Kisi Kalender3dictionary
Mendeklarasikan dictionaryPencarian OpsionalMemperbarui dictionaryMenelusuri dictionaryMengelompokkan NilaiRangkuman: Inventaris6Fungsi Orde Tinggi Bagian 2
compactMapflatMapsorted(by:)Membangun PipelineRingkasan: Papan Peringkat9Penanganan Error
throws dan Errordo, try, catchtry? dan try!Meneruskan ErrorRangkuman: Kalkulator AmanLatihan sendiri: Playground Swift