iOS-এ সমস্যা ম্যানেজ করা

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 কোডের অর্থ দেওয়া হল, যা আপনি দেখতে পেতে পারেন:

টেবিল: 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 থেকে এমন স্ট্যাটাস ভ্যালু পাওয়া যায় যেটির মধ্যে সমস্যার মূল কারণ সম্পর্কে পর্যাপ্ত তথ্য থাকে না।