Swift cung cấp tính năng hỗ trợ tích hợp sẵn để gửi và phát hiện các 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à hợp lý hoá 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 lựa 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 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.
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:
| 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ố tạo đã tồn tại. Ví dụ: đây có thể là lịch biểu có 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ỏng dữ liệu không thể khôi phục. |
deadlineExceeded |
Đã hết hạn trước khi có thể hoàn tất thao tác. Đố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 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ố bất biến mà hệ thống cơ bản dự kiến đã bị hỏng. Mã lỗi này được dành riêng cho các lỗi nghiêm trọng. |
invalidArgument |
Ứng dụng đã chỉ định một đối số không hợp lệ. Xin lưu ý rằng lỗi này khác với lỗ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 không đúng định dạng). |
notFound |
Bạn đã chỉ định một thực thể hoặc tài nguyên không tìm thấy được. Ví dụ: chỉ định một mã bản nhạc không tồn tại khi gọi
play trên thiết bị trình 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 hiện tại của hệ thống. 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 hợp lý trong bối cảnh hiện tại. |
permissionDenied |
Bạn không có quyền thực hiện thao tác đã chỉ định. Mã lỗi này không nên được hiểu là yêu cầu đó hợp lệ. |
resourceExhausted |
Một số tài nguyên đã hết. Ví dụ: lỗi này có thể xảy ra khi người dùng 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ị.Điều này cũng có thể là do bạn đã vượt quá hạn mức dự án Home API. Để biết thêm thông tin, hãy xem phần Quản lý hạn mức. |
unauthenticated |
Không thể xác định 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ụ này hiện không hoạt động. Đây có thể là một điều kiện tạm thời, có thể khắc phục bằng cách thử lại với thời gian đợi tăng dần. Xin lưu ý rằng không phải lúc nào cũng an toàn khi thử lại các thao tác không có tính luỹ đẳng. |
unimplemented |
Thao tác đượ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. Nói 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. |