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