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