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 অভ্যন্তরীণ ত্রুটি. এর মানে হল যে অন্তর্নিহিত সিস্টেমের দ্বারা প্রত্যাশিত কিছু invariants ভেঙে গেছে। এই ত্রুটি কোড গুরুতর ত্রুটির জন্য সংরক্ষিত.
invalidArgument ক্লায়েন্ট একটি অবৈধ যুক্তি নির্দিষ্ট করেছে৷ মনে রাখবেন এটি 'failed Precondition' থেকে আলাদা। `invalidArgument` সিস্টেমের অবস্থা নির্বিশেষে সমস্যাযুক্ত আর্গুমেন্টগুলি নির্দেশ করে (উদাহরণস্বরূপ, একটি বিকৃত ফাইলের নাম)।
notFound আপনি এমন একটি সত্তা বা সংস্থান নির্দিষ্ট করেছেন যা খুঁজে পাওয়া যাচ্ছে না। উদাহরণস্বরূপ, মিডিয়া প্লেয়ার ডিভাইসে play কল করার সময় একটি অস্তিত্বহীন ট্র্যাক আইডি নির্দিষ্ট করা।
outOfRange বর্তমান সিস্টেমের অবস্থার উপর ভিত্তি করে একটি প্যারামিটার বৈধ পরিসীমা অতিক্রম করেছে৷ এই বার্তাটি ঘটে যখন মানটি সেই মানগুলির পরিসরের মধ্যে থাকে যা API কল সম্ভাব্যভাবে গ্রহণ করতে পারে, কিন্তু বর্তমান প্রেক্ষাপটে এর অর্থ হয় না৷
permissionDenied আপনার কাছে নির্দিষ্ট অপারেশন চালানোর অনুমতি নেই। এই ত্রুটি কোডটি ব্যাখ্যা করা উচিত নয় যার অর্থ অনুরোধটি অন্যথায় বৈধ।
resourceExhausted কিছু সম্পদ শেষ হয়ে গেছে। উদাহরণস্বরূপ, এটি নিক্ষেপ করা যেতে পারে যখন কেউ একটি পোষা প্রাণীর ফিডার ডিভাইসে dispense(item:amount:unit:presetName:) কল করে এবং ইউনিটে আর কোন খাবার অবশিষ্ট থাকে না।
unauthenticated কলার সনাক্ত করা যাবে না বা অনুরোধের বৈধ প্রমাণীকরণ শংসাপত্র নেই।
unavailable পরিষেবাটি অনুপলব্ধ৷ এটি সম্ভবত একটি ক্ষণস্থায়ী অবস্থা, যা ব্যাকঅফের সাথে পুনরায় চেষ্টা করে সংশোধন করা যেতে পারে। মনে রাখবেন যে অ-অদম্য ক্রিয়াকলাপগুলি পুনরায় চেষ্টা করা সর্বদা নিরাপদ নয়।
unimplemented অনুরোধ করা ক্রিয়াকলাপটি এই পরিষেবাতে বাস্তবায়িত, সমর্থিত বা সক্ষম করা হয়নি৷
unknown অজানা ত্রুটি. সাধারণভাবে বলতে গেলে, unknown দেখা যায় যখন একটি ত্রুটির অবস্থা ঘটে যা অন্য কোনো ত্রুটি কোড ব্যবহার করে শ্রেণীবদ্ধ করা যায় না। উদাহরণস্বরূপ, এই ত্রুটিটি ফেরত দেওয়া হতে পারে যখন একটি বহিরাগত API থেকে প্রাপ্ত একটি স্ট্যাটাস মান যার মূল কারণ সম্পর্কে পর্যাপ্ত তথ্য নেই৷