সুইফট রানটাইমে পুনরুদ্ধারযোগ্য ত্রুটি (recoverable errors) থ্রো এবং ক্যাচ করার জন্য বিল্ট-ইন সাপোর্ট প্রদান করে। উদাহরণস্বরূপ, যদি আপনার কোডের কোনো অপারেশন ব্যর্থ হয় বা বৈধ না হয়, তাহলে এপিআই (API) একটি HomeError ত্রুটি থ্রো করে। এটি আপনাকে শুধুমাত্র পুনরুদ্ধারযোগ্য ত্রুটিগুলোর উপর মনোযোগ দিতে সাহায্য করে, যার ফলে এরর হ্যান্ডলিং সহজ ও সুবিন্যস্ত হয়। এরপর আপনি বিভিন্ন বিকল্প প্রদান করতে পারেন, যেমন ব্যবহারকারীকে আবার চেষ্টা করার সুযোগ দেওয়া অথবা "Structure not found"-এর মতো কোনো বার্তা প্রদর্শন করা। আর যেহেতু আপনাকে প্রতিটি সম্ভাব্য এক্সেপশন (exception) আলাদাভাবে হ্যান্ডেল করতে হয় না, তাই আপনার কোড কম জঞ্জালপূর্ণ থাকে এবং ফলস্বরূপ, এটি তার মূল উদ্দেশ্যের উপর আরও বেশি মনোনিবেশ করতে পারে।
পুনরুদ্ধারযোগ্য ব্যর্থতা কীভাবে সামাল দেওয়া যেতে পারে তার একটি উদাহরণ:
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
}
নিম্নলিখিত সারণিতে সেইসব HomeError কোডগুলির অর্থ দেওয়া হলো, যেগুলোর সম্মুখীন আপনি হতে পারেন:
| কোড | অর্থ |
|---|---|
aborted | অপারেশনটি বাতিল করা হয়েছে। এটি সাধারণত কনকারেন্সি সংক্রান্ত কোনো সমস্যা, যেমন সিকোয়েন্স চেক ব্যর্থতা বা ট্রানজ্যাকশন বাতিল হওয়ার ক্ষেত্রে দেখা যায়। |
alreadyExists | আপনি যে রিসোর্স বা এনটিটি তৈরি করার চেষ্টা করছেন, তা ইতিমধ্যেই বিদ্যমান। উদাহরণস্বরূপ, এটি একটি থার্মোস্ট্যাটের জন্য একটি নামযুক্ত শিডিউল হতে পারে। |
cancelled | অপারেশনটি বাতিল করা হয়েছিল, সাধারণত ফোনকারীর দ্বারাই। |
dataLoss | অপূরণীয় ডেটা ক্ষতি বা বিকৃতি। |
deadlineExceeded | অপারেশনটি সম্পন্ন হওয়ার আগেই সময়সীমা শেষ হয়ে গেছে। যেসব অপারেশন সিস্টেমের অবস্থা পরিবর্তন করে, সেগুলো সফলভাবে সম্পন্ন হলেও এই ত্রুটিটি প্রদর্শিত হতে পারে। উদাহরণস্বরূপ, সার্ভার থেকে একটি সফল প্রতিক্রিয়া পেতে এতটাই দেরি হতে পারে যে সময়সীমা শেষ হয়ে গেছে। |
failedPrecondition | অপারেশনটি প্রত্যাখ্যান করা হয়েছে কারণ অপারেশনটি সম্পাদনের জন্য সিস্টেমটি প্রয়োজনীয় অবস্থায় নেই। উদাহরণস্বরূপ, আপনি এই বার্তাটি পেতে পারেন যদি আপনি এমন একটি ওভেনে ' stop কমান্ড দেন যা ইতিমধ্যেই বন্ধ আছে। |
internal | অভ্যন্তরীণ ত্রুটি। এর অর্থ হলো, অন্তর্নিহিত সিস্টেমের প্রত্যাশিত কিছু অপরিবর্তনীয়তা লঙ্ঘিত হয়েছে। এই ত্রুটি কোডটি গুরুতর ত্রুটির জন্য সংরক্ষিত। |
invalidArgument | ক্লায়েন্ট একটি অবৈধ আর্গুমেন্ট নির্দিষ্ট করেছে। উল্লেখ্য যে, এটি `failedPrecondition` থেকে ভিন্ন। `invalidArgument` এমন আর্গুমেন্ট নির্দেশ করে যা সিস্টেমের অবস্থা নির্বিশেষে সমস্যাযুক্ত (উদাহরণস্বরূপ, একটি ত্রুটিপূর্ণ ফাইলের নাম)। |
notFound | আপনি এমন একটি সত্তা বা রিসোর্স নির্দিষ্ট করেছেন যা খুঁজে পাওয়া যায় না। উদাহরণস্বরূপ, কোনো মিডিয়া প্লেয়ার ডিভাইসে play করার সময় একটি অস্তিত্বহীন ট্র্যাক আইডি নির্দিষ্ট করা। |
outOfRange | বর্তমান সিস্টেম অবস্থা অনুযায়ী, একটি প্যারামিটার বৈধ সীমা অতিক্রম করেছে। এই বার্তাটি তখন প্রদর্শিত হয় যখন মানটি এপিআই কল দ্বারা সম্ভাব্যভাবে গৃহীত হতে পারে এমন মানের সীমার মধ্যে থাকে, কিন্তু বর্তমান প্রেক্ষাপটে তা অর্থবহ হয় না। |
permissionDenied | নির্দিষ্ট অপারেশনটি সম্পাদন করার অনুমতি আপনার নেই। এই এরর কোডটির অর্থ এই নয় যে অনুরোধটি অন্যথায় বৈধ। |
resourceExhausted | কোনো একটি রিসোর্স নিঃশেষ হয়ে গেছে। উদাহরণস্বরূপ, যখন কোনো পেট ফিডার ডিভাইসে dispense(item:amount:unit:presetName:) কল করা হয় এবং ইউনিটটিতে আর কোনো খাবার অবশিষ্ট থাকে না, তখন এই ত্রুটিটি দেখা দিতে পারে।হোম এপিআই প্রকল্পের কোটা অতিক্রম করার কারণেও এটি হতে পারে। আরও তথ্যের জন্য, কোটা ব্যবস্থাপনা দেখুন। |
unauthenticated | আহ্বানকারীকে শনাক্ত করা যাচ্ছে না অথবা অনুরোধটিতে বৈধ প্রমাণীকরণ তথ্য নেই। |
unavailable | পরিষেবাটি অনুপলব্ধ। এটি সম্ভবত একটি সাময়িক অবস্থা, যা ব্যাকঅফ সহ পুনরায় চেষ্টা করে ঠিক করা যেতে পারে। মনে রাখবেন যে নন-আইডেমপোটেন্ট অপারেশনগুলো পুনরায় চেষ্টা করা সবসময় নিরাপদ নয়। |
unimplemented | অনুরোধকৃত অপারেশনটি এই পরিষেবাতে বাস্তবায়িত, সমর্থিত বা সক্রিয় করা নেই। |
unknown | অজানা ত্রুটি। সাধারণত, যখন এমন কোনো ত্রুটি ঘটে যা অন্য কোনো ত্রুটি কোড ব্যবহার করে শ্রেণীবদ্ধ করা যায় না, তখন unknown ত্রুটিটি দেখা দেয়। উদাহরণস্বরূপ, কোনো বাহ্যিক API থেকে প্রাপ্ত স্ট্যাটাস ভ্যালুতে মূল কারণ সম্পর্কে পর্যাপ্ত তথ্য না থাকলে এই ত্রুটিটি প্রদর্শিত হতে পারে। |