Xử lý lỗi trên iOS

Swift cung cấp tính năng hỗ trợ tích hợp sẵn để truyền và bắt các lỗi có thể khôi phục tại 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ắc 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ị một 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ắc 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:

Bảng: HomeError codes
Ý 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 giao dịch bị huỷ.
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 máy điều nhiệt.
cancelled Thao tác đã bị huỷ, thường là do người gọi.
dataLoss Mất hoặc hư 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 để thời hạn kết thúc.
failedPrecondition Thao tác bị từ chối vì hệ thống không ở trạng thái cần thiết để thực hiện 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ị 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 đ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 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ã nhận dạng bản nhạc không tồn tại khi gọi play trên một 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 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 hiện thao tác đã chỉ định. 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ụ: điều này có thể xảy ra 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ụ này hiện không hoạt động. Đây thường là một điều kiện tạm thời và bạn có thể khắc phục bằng cách thử lại với độ trễ. Xin lưu ý rằng không phải lúc nào bạn cũng có thể thử lại các thao tác không có tính chất luỹ đẳng.
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. 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 không có đủ thông tin về nguyên nhân gốc.