iOS-এ সমস্যা হ্যান্ডলিং

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