do, try, catch
Termasuk bagian Logika dan Alur dalam perjalanan Swift di Coddy. Pelajaran 45 dari 56.
Bentuk lengkap untuk menangani error adalah do/try/catch:
enum DivError: Error { case byZero }
func divide(_ a: Int, _ b: Int) throws -> Int {
if b == 0 { throw DivError.byZero }
return a / b
}
do {
let r = try divide(10, 2)
print(r) // 5
} catch DivError.byZero {
print("can't divide by zero")
} catch {
print("unknown error")
}try diletakkan sebelum pemanggilan apa pun yang dapat melempar error. Jika pemanggilan tersebut melempar error, kontrol beralih ke catch yang cocok. Jika tidak, eksekusi berlanjut melewati blok do.
Beberapa klausa catch dijalankan dari atas ke bawah, dan yang pertama cocok akan menang, seperti switch. catch tanpa parameter di bagian akhir adalah catch-all, kamu hampir selalu ingin menggunakannya agar compiler tidak mengeluh.
Tantangan
MudahDefinisikan enum ParseError: Error dengan tiga kasus: empty, notInteger, dan negative.
Definisikan fungsi yang melempar error parsePositive(_ s: String) throws -> Int yang:
- Melempar
.emptyketikasyang sudah dihapus spasi putihnya kosong - Melempar
.notIntegerketikastidak bisa diuraikan sebagaiInt - Melempar
.negativeketika nilai yang diuraikan adalah< 0 - Jika tidak, mengembalikan nilai yang diuraikan
Baca satu baris dari stdin dan panggil parsePositive dalam blok do/catch. Cetak:
got: <n>jika berhasilerror: empty,error: not integer, atauerror: negativeuntuk setiap kasus
Untuk input 42, output-nya adalah got: 42. Untuk baris kosong, output-nya error: empty. Untuk abc, output-nya error: not integer.
Coba sendiri
let line = readLine()!
// TODO: enum ParseError; func parsePositive(_:) throws -> Int;
// do/try/catch dengan tiga cabang dan satu cabang catch-all
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