Swift-এ রানটাইমে ফিরিয়ে আনা যায় এমন সমস্যা থ্রো করা ও ক্যাচ করার জন্য বিল্ট-ইন সহায়তা প্রদান করা হয়।
যেমন, আপনার কোডে কোনও অপারেশন ব্যর্থ হলে বা বৈধ না হলে, API একটি HomeError
এরর দেখায়। এর ফলে, আপনি শুধুমাত্র সমাধানযোগ্য সমস্যার উপর ফোকাস করতে পারেন বলে
সমস্যা সমাধান করা সহজ ও সুবিন্যস্ত হয়ে যায়। তারপরে, আপনি
বিকল্প প্রদান করতে পারেন, যেমন ব্যবহারকারীকে আবার চেষ্টা করতে দেওয়া বা
"স্ট্রাকচার পাওয়া যায়নি"-এর মতো মেসেজ দেখানো। এবং যেহেতু আপনাকে প্রতিটি সম্ভাব্য ব্যতিক্রমকে স্পষ্টভাবে হ্যান্ডেল করতে হবে না, তাই আপনার কোডটি কম বিশৃঙ্খল এবং ফলস্বরূপ, এর প্রাথমিক উদ্দেশ্যর উপর আরও বেশি
ফোকাস করে।
সমাধানযোগ্য সমস্যা কীভাবে সামলাতে হয় তার একটি উদাহরণ:
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 |
বর্তমান সিস্টেমের স্টেটের উপর ভিত্তি করে, একটি প্যারামিটার বৈধ রেঞ্জের বাইরে চলে গেছে। এই মেসেজটি তখনই দেখানো হয় যখন ভ্যালু, API কলের সম্ভাব্য গ্রহণযোগ্য ভ্যালুর রেঞ্জের মধ্যে থাকে কিন্তু বর্তমান প্রসঙ্গে তা অর্থপূর্ণ হয় না। |
permissionDenied |
উল্লেখ করা অপারেশন চালানোর অনুমতি আপনার কাছে নেই। এই সমস্যা কোড থেকে এই অর্থ করা উচিত নয় যে অনুরোধটি অন্যভাবে বৈধ। |
resourceExhausted |
কিছু রিসোর্স শেষ হয়ে গেছে। যেমন, এটি তখন হতে পারে
যখন কেউ
dispense(item:amount:unit:presetName:) কোনও পোষ্য
খাওয়ানোর ডিভাইসে কল করেন এবং ইউনিটে আর কোনও খাবার অবশিষ্ট না থাকে।এছাড়াও, এটি Home APIs প্রোজেক্ট কোটা পেরিয়ে যাওয়ার কারণেও হতে পারে। আরও তথ্যের জন্য, কোটা ম্যানেজমেন্ট দেখুন। |
unauthenticated |
কলারকে শনাক্ত করা যাচ্ছে না অথবা অনুরোধে সঠিক যাচাইকরণ ক্রেডেনশিয়াল নেই। |
unavailable |
পরিষেবা উপলভ্য নেই। এটি সম্ভবত একটি ক্ষণস্থায়ী অবস্থা, যা ব্যাকঅফ সহ আবার চেষ্টা করে ঠিক করা যেতে পারে। মনে রাখবেন যে নন-ইডেম্পোটেন্ট অপারেশন আবার চেষ্টা করা সবসময় নিরাপদ নয়। |
unimplemented |
অনুরোধ করা অপারেশনটি এই পরিষেবায় ইমপ্লিমেন্ট, কাজ করে বা চালু করা নেই। |
unknown |
অজানা সমস্যা। সাধারণত, unknown তখন দেখা যায়
যখন এমন কোনও সমস্যা হয় যা অন্য কোনও
সমস্যার কোড ব্যবহার করে শ্রেণীবদ্ধ করা যায় না। যেমন, এই সমস্যাটি তখন হতে পারে যখন কোনও এক্সটার্নাল API থেকে এমন
স্ট্যাটাস ভ্যালু পাওয়া যায় যেটির মধ্যে সমস্যার মূল কারণ সম্পর্কে পর্যাপ্ত
তথ্য থাকে না। |