Swift:
Xử lý lỗi
Làm thế nào:
Swift sử dụng xử lý lỗi với các khối do
, try
, và catch
. Hãy xem xét:
enum FileError: Error {
case fileDoesNotExist
case noPermission
}
func readFile(atPath path: String) throws -> String {
// Giả sử chúng ta có một số logic ở đây để kiểm tra xem một tệp có tồn tại và liệu chúng ta có quyền đọc nó không
let fileExists = false
let havePermission = true
if !fileExists {
throw FileError.fileDoesNotExist
}
if !havePermission {
throw FileError.noPermission
}
return "Nội dung tệp ở đây"
}
do {
let fileContent = try readFile(atPath: "/path/to/file")
print(fileContent)
} catch FileError.fileDoesNotExist {
print("Whoops! Tệp không tìm thấy.")
} catch FileError.noPermission {
print("Ah! Không có quyền đọc tệp.")
} catch {
print("Một lỗi không xác định đã xảy ra.")
}
Kết quả mẫu:
Whoops! Tệp không tìm thấy.
Sâu hơn
Xử lý lỗi không phải lúc nào cũng mượt mà như bây giờ. Trong Objective-C, bạn sẽ xử lý với các con trỏ đến đối tượng NSError, điều đó cảm thấy cồng kềnh. Bây giờ, chúng ta có một hệ thống tinh tế hơn với enum Swift và giao thức Error
.
Swift’s throw
cho phép chúng ta tín hiệu rằng có điều gì đó không ổn. Các khối do
hành động giống như những lĩnh vực nhận biết lỗi, tiền tố try
gọi công việc rủi ro, và catch
xử lý mọi thứ nếu chúng đi vào ngõ cụt.
Optional là một giải pháp thay thế cho những tình huống không hẳn là “lỗi” nhưng vẫn có thể “không có kết quả”. Chúng giống như biến Schrödinger—chúng có giá trị hoặc không.
Để sâu hơn, hãy xem xét loại Result
, đây là những hybrid tinh tế giữa mô hình trả về thông thường và mô hình lỗi.
Xem thêm
- Hướng dẫn Xử lý Lỗi Swift Chính thức: Tài liệu Apple
- Các Phương pháp Thực hành Tốt nhất về Xử lý Lỗi Swift: RayWenderlich.com
- Xử lý Lỗi Nâng cao trong Swift: Bài viết trên Medium