Swift cung cấp tính năng hỗ trợ tích hợp sẵn để gửi và phát hiện lỗi có thể khôi phục trong thời gian chạy. Ví dụ: nếu một thao tác trong mã của bạn không thành công hoặc không hợp lệ, thì API sẽ gửi lỗi HomeError
. Điều này giúp đơn giản hoá và tinh giản việc xử lý lỗi bằng cách cho phép bạn chỉ tập trung vào các lỗi có thể khôi phục. Sau đó, bạn có thể cung cấp các tuỳ chọn, chẳng hạn như cho phép người dùng thử lại hoặc hiển thị thông báo như "Không tìm thấy cấu trúc". Và vì bạn không phải xử lý rõ ràng mọi trường hợp ngoại lệ có thể xảy ra, nên mã của bạn sẽ ít lộn xộn hơn và do đó, vẫn tập trung hơn vào mục đích chính của mã.
Ví dụ về cách xử lý lỗi có thể khôi phục:
let light1 = lightDevices.first
if let light = light1 {
do {
try await structure.move(device: light, to: room)
} catch let error as HomeError {
// Code for handling the exception
}
Bảng sau đây cung cấp ý nghĩa của các mã HomeError
mà bạn có thể gặp phải:
Mã | Ý nghĩa |
---|---|
aborted |
Thao tác đã bị huỷ. Lỗi này thường xuất hiện khi có vấn đề về tính đồng thời, chẳng hạn như lỗi kiểm tra trình tự hoặc huỷ giao dịch. |
alreadyExists |
Tài nguyên hoặc thực thể mà bạn đang cố gắng tạo đã tồn tại. Ví dụ: đây có thể là lịch biểu được đặt tên cho máy điều nhiệt. |
cancelled |
Thao tác đã bị huỷ, thường là do phương thức gọi. |
dataLoss |
Mất hoặc hư hỏng dữ liệu và không phục hồi được. |
deadlineExceeded |
Thời hạn đã hết trước khi thao tác có thể hoàn tất. Đối với các thao tác thay đổi trạng thái của hệ thống, lỗi này có thể được trả về ngay cả khi thao tác đã hoàn tất thành công. Ví dụ: phản hồi thành công từ máy chủ có thể bị trì hoãn đủ lâu để thời hạn hết hạn. |
failedPrecondition |
Thao tác này bị từ chối vì hệ thống không ở trạng thái cần thiết để thực thi thao tác. Ví dụ: bạn có thể nhận được thông báo này nếu gọi stop trên một lò nướng đã dừng. |
internal |
Lỗi nội bộ. Điều này có nghĩa là một số hằng số mà hệ thống cơ bản dự kiến đã bị phá vỡ. Mã lỗi này được dành riêng cho các lỗi nghiêm trọng. |
invalidArgument |
Ứng dụng khách chỉ định đối số không hợp lệ. Xin lưu ý rằng điều này khác với "failedPrecondition". "invalidArgument" cho biết các đối số có vấn đề bất kể trạng thái của hệ thống (ví dụ: tên tệp có định dạng không chính xác). |
notFound |
Bạn đã chỉ định một thực thể hoặc tài nguyên không tìm thấy. Ví dụ: chỉ định mã nhận dạng bản nhạc không tồn tại khi gọi
play trên thiết bị phát nội dung nghe nhìn. |
outOfRange |
Một tham số đã vượt quá phạm vi hợp lệ, dựa trên trạng thái hệ thống hiện tại. Thông báo này xuất hiện khi giá trị nằm trong phạm vi giá trị mà lệnh gọi API có thể chấp nhận, nhưng không có ý nghĩa trong ngữ cảnh hiện tại. |
permissionDenied |
Bạn không có quyền thực thi thao tác đã chỉ định. Bạn không nên diễn giải mã lỗi này theo nghĩa là yêu cầu hợp lệ. |
resourceExhausted |
Một số tài nguyên đã hết. Ví dụ: ngoại lệ này có thể được gửi khi một người gọi
dispense(item:amount:unit:presetName:) trên thiết bị cho thú cưng ăn và không còn thức ăn trong thiết bị. |
unauthenticated |
Không xác định được phương thức gọi hoặc yêu cầu không có thông tin xác thực hợp lệ. |
unavailable |
Dịch vụ không hoạt động. Đây có thể là một điều kiện tạm thời, có thể được khắc phục bằng cách thử lại với thời gian đợi. Xin lưu ý rằng việc thử lại các thao tác không idempotent không phải lúc nào cũng an toàn. |
unimplemented |
Thao tác đã yêu cầu không được triển khai, hỗ trợ hoặc bật trong dịch vụ này. |
unknown |
Lỗi không xác định. Nhìn chung, unknown xuất hiện khi xảy ra một điều kiện lỗi không thể phân loại bằng bất kỳ mã lỗi nào khác. Ví dụ: lỗi này có thể được trả về khi giá trị trạng thái nhận được từ một API bên ngoài thiếu thông tin đầy đủ về nguyên nhân gốc rễ. |