Làm thế nào để in chi tiết của một ngoại lệ 'catch all' trong Swift?


84

Tôi đang cập nhật mã của mình để sử dụng Swift và tôi đang tự hỏi làm thế nào để in chi tiết lỗi cho một ngoại lệ phù hợp với mệnh đề 'catch all'. Tôi đã sửa đổi một chút ví dụ từ Trang Hướng dẫn Ngôn ngữ Swift này để minh họa quan điểm của tôi:

do {
    try vend(itemNamed: "Candy Bar")
    // Enjoy delicious snack
} catch VendingMachineError.InvalidSelection {
    print("Invalid Selection.")
} catch VendingMachineError.OutOfStock {
    print("Out of Stock.")
} catch VendingMachineError.InsufficientFunds(let amountRequired) {
    print("Insufficient funds. Please insert an additional $\(amountRequired).")
} catch {
    // HOW DO I PRINT OUT INFORMATION ABOUT THE ERROR HERE?
}

Nếu tôi gặp một ngoại lệ không mong muốn, tôi cần có thể ghi lại điều gì đó về nguyên nhân gây ra nó.

Câu trả lời:


121

Tôi chỉ cần tìm nó ra. Tôi nhận thấy dòng này trong Tài liệu Swift:

Nếu mệnh đề bắt không chỉ định mẫu, mệnh đề sẽ khớp và liên kết bất kỳ lỗi nào với lỗi có tên hằng cục bộ

Vì vậy, sau đó tôi đã thử điều này:

do {
    try vend(itemNamed: "Candy Bar")
...
} catch {
    print("Error info: \(error)")
}

Và nó đã cho tôi một mô tả tốt đẹp.


47

Từ ngôn ngữ lập trình Swift :

Nếu một catchmệnh đề không chỉ định một mẫu, mệnh đề đó sẽ khớp và ràng buộc bất kỳ lỗi nào với một hằng cục bộ được đặt tên error.

Có nghĩa là, có một điều ngầm hiểu let errortrong catchmệnh đề:

do {
    // …
} catch {
    print("caught: \(error)")
}

Ngoài ra, có vẻ như đó let constant_namecũng là một mẫu hợp lệ, vì vậy bạn có thể sử dụng nó để đổi tên hằng số lỗi (điều này có thể hữu ích nếu tên errorđã được sử dụng):

do {
    // …
} catch let myError {
   print("caught: \(myError)")
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.