throws dan Error
Termasuk bagian Logika dan Alur dalam perjalanan Swift di Coddy. Pelajaran 44 dari 56.
Swift menangani error dengan membuat fungsi menyatakan bahwa fungsi tersebut dapat gagal. Isi fungsi melempar nilai error; pemanggil harus menanganinya.
Tipe error adalah apa pun yang sesuai dengan protokol bawaan Error. Cara paling sederhana untuk mendeklarasikan tipe buatanmu sendiri adalah dengan enum:
enum InputError: Error {
case empty
case tooLong
}Fungsi yang melempar error menggunakan kata kunci throws pada deklarasinya dan pernyataan throw di dalam tubuhnya:
func validate(_ s: String) throws -> String {
if s.isEmpty { throw InputError.empty }
if s.count > 100 { throw InputError.tooLong }
return s
}Kamu tidak bisa memanggil fungsi yang melempar error secara langsung, compiler memaksamu menangani error tersebut. Pelajaran berikutnya membahas caranya.
Tantangan
MudahDefinisikan enum NumError: Error dengan dua kasus: negative dan tooBig.
Definisikan fungsi yang melempar error, doubleSafely(_ n: Int) throws -> Int, yang:
- Melempar
.negativesaatn < 0 - Melempar
.tooBigsaatn > 100 - Selain itu, mengembalikan
n * 2
Baca satu bilangan bulat dari stdin. Panggil doubleSafely di dalam blok do/catch (kamu akan mempelajari bentuk persisnya di pelajaran berikutnya; untuk sekarang, gunakan kerangka persis ini):
do {
let result = try doubleSafely(n)
print("ok: \(result)")
} catch NumError.negative {
print("negative")
} catch NumError.tooBig {
print("too big")
} catch {
print("unknown")
}Untuk input 10, output-nya adalah ok: 20. Untuk -1, output-nya adalah negative. Untuk 500, output-nya adalah too big.
Coba sendiri
let n = Int(readLine()!)!
// TODO: enum NumError: Error { case negative, tooBig }
// func doubleSafely(_ n: Int) throws -> Int { ... }
// do { let r = try doubleSafely(n); ... } catch NumError.negative { ... } ...
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