Swift cung cấp tính năng hỗ trợ tích hợp sẵn để gửi và bắt 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à tinh giản quy trình 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ẽ gọn gàng 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 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à một lịch biểu có tên cho bộ điều nhiệt. |
cancelled |
Thao tác đã bị huỷ, thường là do người gọi. |
dataLoss |
Mất hoặc hỏng dữ liệu và không phục hồi được. |
deadlineExceeded |
Đã hết thời hạn 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ột máy chủ có thể bị trì hoãn đủ lâu để hết thời 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 mong đợi đã bị phá vỡ. Mã lỗi này 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 mã 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 bị lỗi). |
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 trạng thá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 bối 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 hiểu mã lỗi này có nghĩa là yêu cầu hợp lệ. |
resourceExhausted |
Một số tài nguyên đã cạn kiệt. Ví dụ: lỗi 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ị.Điều này cũng có thể là do bạn vượt quá hạn mức dự án API Nhà thông minh. Để biết thêm thông tin, hãy xem Quản lý hạn mức. |
unauthenticated |
Không xác định được người 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 rất 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 chờ luỹ tiến. Xin lưu ý rằng bạn 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 lũy đẳ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 một
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. |