সুইফট 2 ত্রুটি পরিচালনার মডেলটির জন্য দুটি গুরুত্বপূর্ণ বিষয় রয়েছে: ক্লান্তি এবং স্থিতিস্থাপকতা। একসাথে, তারা আপনার do
/ catch
বিবৃতিতে প্রতিটি সম্ভাব্য ত্রুটি ধরার প্রয়োজনে সিদ্ধ হয় , কেবল আপনি জানেন না আপনি নিক্ষেপ করতে পারেন।
লক্ষ্য করুন যে কোনও ফাংশন কোন ধরণের ত্রুটি ফেলতে পারে তা আপনি ঘোষণা করেন না কেবল কেবল এটি ছোঁড়ে কিনা। এটি একটি শূন্য-এক-অনন্ত ধরণের সমস্যা: অন্যের জন্য (যেমন আপনার ভবিষ্যতের স্ব) সহ কোনও ফাংশনকে সংজ্ঞায়িত করা হচ্ছে, আপনাকে আপনার ফাংশনের প্রতিটি ক্লায়েন্টকে তার প্রয়োগের প্রতিটি পরিবর্তনের সাথে খাপ খাইয়ে নিতে হবে না এটি কী ত্রুটিগুলি ফেলতে পারে তা সহ ফাংশন। আপনি এমন কোড চান যা আপনার ফাংশনকে এমন পরিবর্তনের জন্য স্থিতিস্থাপক হিসাবে কল করে।
যেহেতু আপনার ফাংশন এটি কোন ধরণের ত্রুটি নিক্ষেপ করতে পারে না (বা ভবিষ্যতে নিক্ষেপ করতে পারে), তাই catch
যে ব্লকগুলি এটিকে ত্রুটিযুক্ত করে তা কী ধরণের ত্রুটি ফেলতে পারে তা জানে না। সুতরাং, আপনি যে ত্রুটি সম্পর্কে জানতেন সেগুলি পরিচালনা করার পাশাপাশি, আপনি catch
যে সার্বজনীন বিবৃতি দিয়ে যা করেন না সেগুলি পরিচালনা করতে হবে - এইভাবে যদি আপনার ফাংশনটি ভবিষ্যতে এটির ত্রুটিগুলির সেটকে পরিবর্তন করে, কলকারীরা এখনও এটি ধরে ফেলবে ত্রুটি।
do {
let sandwich = try makeMeSandwich(kitchen)
print("i eat it \(sandwich)")
} catch SandwichError.NotMe {
print("Not me error")
} catch SandwichError.DoItYourself {
print("do it error")
} catch let error {
print(error.localizedDescription)
}
তবে আসুন না থামি। এই স্থিতিস্থাপকতা সম্পর্কে আরও কিছু ভাবুন। আপনি নিজের স্যান্ডউইচকে যেভাবে ডিজাইন করেছেন, যেখানে আপনি সেগুলি ব্যবহার করেন না কেন সেখানে আপনাকে ত্রুটি বর্ণনা করতে হবে। এর অর্থ হ'ল আপনি যখনই ত্রুটির কেসগুলির সেট পরিবর্তন করেন, আপনাকে সেগুলিকে ব্যবহার করা প্রতিটি জায়গা পরিবর্তন করতে হবে ... খুব মজাদার নয়।
আপনার নিজের ত্রুটি প্রকারের সংজ্ঞা দেওয়ার পিছনে ধারণাটি হ'ল আপনাকে সেই জাতীয় জিনিসকে কেন্দ্রিয় করে তোলা। আপনি description
আপনার ত্রুটিগুলির জন্য কোনও পদ্ধতি নির্ধারণ করতে পারেন :
extension SandwichError: CustomStringConvertible {
var description: String {
switch self {
case NotMe: return "Not me error"
case DoItYourself: return "Try sudo"
}
}
}
এবং তারপরে আপনার ত্রুটি পরিচালনার কোডটি আপনার ত্রুটির ধরণটি নিজেই বর্ণনা করতে বলতে পারে - এখন যেখানেই আপনি ত্রুটিগুলি পরিচালনা করেন সে জায়গাগুলি একই কোড ব্যবহার করতে পারে এবং ভবিষ্যতে সম্ভাব্য ত্রুটি কেসগুলিও পরিচালনা করতে পারে।
do {
let sandwich = try makeMeSandwich(kitchen)
print("i eat it \(sandwich)")
} catch let error as SandwichError {
print(error.description)
} catch {
print("i dunno")
}
এটি ত্রুটি প্রকারের (বা তাদের উপর এক্সটেনশানগুলি) ত্রুটিগুলির প্রতিবেদন করার অন্যান্য উপায়গুলিকে সমর্থন করারও পথ প্রশস্ত করে - উদাহরণস্বরূপ, আপনার ত্রুটি টাইপের একটি এক্সটেনশান থাকতে পারে যা UIAlertController
কোনও আইওএস ব্যবহারকারীর কাছে ত্রুটিটি রিপোর্ট করার জন্য কীভাবে উপস্থাপন করতে পারে তা জানে ।