try? dan try!
Termasuk bagian Logika dan Alur dalam perjalanan Swift di Coddy. Pelajaran 46 dari 56.
Terkadang, kamu tidak peduli error apa yang terjadi di dalam fungsi, kamu hanya menginginkan hasil atau nilai pengganti. Swift menyediakan dua bentuk singkat.
try? mengubah error apa pun yang dilempar menjadi nil. Hasilnya adalah Optional dari tipe kembalian fungsi:
enum E: Error { case nope }
func risky() throws -> Int { throw E.nope }
let result = try? risky() // nil
let safe = (try? risky()) ?? 0 // 0Padukan dengan ?? untuk nilai default sebaris. Ini versi paling singkat dari "panggil ini, beri aku nilai apa pun yang terjadi".
try! menyatakan "Aku tahu ini tidak akan melempar error". Jika tetap terjadi, programmu akan crash. Gunakan hanya jika kamu bisa membuktikan bahwa pemanggilan ini aman; dalam kode sehari-hari, lebih baik gunakan try? dengan nilai cadangan atau do/catch lengkap.
Tantangan
MudahDefinisikan NumError: Error dengan satu kasus bad. Definisikan parseEven(_ s: String) throws -> Int yang melempar error jika:
stidak dapat diuraikan sebagaiInt, atau nilai yang diuraikan adalah bilangan ganjil- Jika tidak, fungsi mengembalikan bilangan bulat yang diuraikan
Baca satu baris input: list string yang dipisahkan dengan koma. Untuk setiap string, gunakan try? diikuti ?? -1 untuk mendapatkan bilangan bulat genap yang diuraikan atau -1.
Cetak bilangan bulat yang dihasilkan secara berurutan dan gabungkan dengan ,. Lalu, cetak jumlah nilai yang menjadi -1 pada baris kedua.
Untuk input 4,7,abc,8,11,2, output-nya adalah:
4,-1,-1,8,-1,2
3Coba sendiri
let parts = readLine()!.components(separatedBy: ",")
// TODO: enum NumError; func parseEven(_:) throws -> Int;
// untuk setiap part, (try? parseEven(part)) ?? -1
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