রানটাইমে সমাধান করা যাবে এমন সমস্যা থ্রো ও ক্যাচ করার জন্য 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 API প্রোজেক্ট কোটা পেরিয়ে যাওয়ার কারণেও এটি হতে পারে। আরও তথ্যের জন্য, কোটা ম্যানেজমেন্ট দেখুন। |
unauthenticated |
কলারের পরিচয় শনাক্ত করা যায়নি অথবা অনুরোধে সঠিক যাচাইকরণ সংক্রান্ত ক্রেডেনশিয়াল নেই। |
unavailable |
পরিষেবা উপলভ্য নেই। এটি সম্ভবত একটি ক্ষণস্থায়ী পরিস্থিতি, যা ব্যাকঅফ সহ আবার চেষ্টা করে সংশোধন করা যেতে পারে। মনে রাখবেন যে নন-আইডেমপোটেন্ট অপারেশন আবার চেষ্টা করা সবসময় নিরাপদ নয়। |
unimplemented |
অনুরোধ করা অপারেশন এই পরিষেবায় প্রয়োগ করা, কাজ করা বা চালু করা হয়নি। |
unknown |
অজানা সমস্যা। সাধারণত, unknown দেখা যায়
যখন এমন কোনও সমস্যা হয় যা অন্য কোনও সমস্যার কোড ব্যবহার করে
শ্রেণীবদ্ধ করা যায় না। যেমন, কোনও এক্সটার্নাল API থেকে স্ট্যাটাস ভ্যালু পাওয়া গেলে এই সমস্যা হতে পারে,
যেখানে মূল কারণ সম্পর্কে পর্যাপ্ত তথ্য
থাকে না। |