এই উত্তরটি হল সম্প্রদায় উইকি । আপনার যদি মনে হয় এটি আরও ভাল করা যায় তবে এটিকে সম্পাদনা করতে নির্দ্বিধায় !
পটভূমি: Oচ্ছিক কী?
সুইফটে, Optional
একটি জেনেরিক টাইপ যা কোনও মান (যে কোনও ধরণের) থাকতে পারে, বা কোনও মানই রাখে না।
অন্যান্য অনেক প্রোগ্রামিং ভাষায়, একটি নির্দিষ্ট "সেন্ডিনেল" মান প্রায়শই একটি মানের অভাব বোঝাতে ব্যবহৃত হয় । উদ্দেশ্য-সিতে, উদাহরণস্বরূপ, nil
( নাল পয়েন্টার ) কোনও বস্তুর অভাব নির্দেশ করে। তবে আদিম ধরণের সাথে কাজ করার সময় এটি আরও জটিল হয়ে -1
ওঠে - কোনও পূর্ণসংখ্যার অনুপস্থিতি বা সম্ভবত INT_MIN
, বা অন্য কোনও পূর্ণসংখ্যার ইঙ্গিত দেওয়ার জন্য ব্যবহার করা উচিত ? যদি কোনও নির্দিষ্ট মানটিকে "কোনও পূর্ণসংখ্যা না" বোঝার জন্য বেছে নেওয়া হয়, তার অর্থ এটি আর বৈধ মান হিসাবে বিবেচনা করা যাবে না ।
সুইফট একটি প্রকার-সুরক্ষিত ভাষা, যার অর্থ ভাষাটি আপনাকে কোডগুলি যে ধরণের মানগুলির সাথে কাজ করতে পারে সে সম্পর্কে পরিষ্কার হতে সহায়তা করে। যদি আপনার কোডের কোনও অংশ স্ট্রিংয়ের প্রত্যাশা করে তবে প্রকার সুরক্ষা আপনাকে ভুল করে এটি কোনও আন্তঃ পাস করতে বাধা দেয়।
সুইফটে, যে কোনও প্রকারকে alচ্ছিক করা যেতে পারে । একটি alচ্ছিক মান মূল ধরণ বা বিশেষ মান থেকে যে কোনও মান নিতে পারে nil
।
বিকল্পগুলিতে ?
প্রকারের প্রত্যয় দিয়ে সংজ্ঞায়িত করা হয় :
var anInt: Int = 42
var anOptionalInt: Int? = 42
var anotherOptionalInt: Int? // `nil` is the default when no value is provided
একটি alচ্ছিক মধ্যে একটি মান অভাব দ্বারা চিহ্নিত করা হয় nil
:
anOptionalInt = nil
(দ্রষ্টব্য যে এটি ওজেক্টিভ-সি এর nil
মতো নয় nil
Ob অবজেক্টিভ-সি-তে nil
বৈধ অবজেক্ট পয়েন্টারের অনুপস্থিতি ; সুইফ্টে বিকল্পগুলি বস্তু / রেফারেন্সের ধরণের মধ্যে সীমাবদ্ধ নয় Has alচ্ছিক হাসকেলের সম্ভবত একই আচরণ করে ))
আমি কেন " মারাত্মক ত্রুটি: অপশনালিক মানটি আবরণ করার সময় অপ্রত্যাশিতভাবে পাওয়া গেলাম "?
Anচ্ছিকের মানটি অ্যাক্সেস করতে (যদি এর কোনও একটি থাকে), আপনাকে এটি মোড়ানো দরকার । একটি alচ্ছিক মান নিরাপদে বা জোর করে মোড়ানো যায়। যদি আপনি একটি forceচ্ছিককে জোর-আন-মোড়ক করেন এবং এর কোনও মান না থাকে তবে আপনার প্রোগ্রামটি উপরের বার্তার সাথে ক্রাশ হবে।
কোডের লাইন হাইলাইট করে এক্সকোড আপনাকে ক্র্যাশ দেখায়। এই লাইনে সমস্যা দেখা দেয়।
এই ক্র্যাশ দুটি ভিন্ন ধরণের জোর-আন-মোড়ের সাথে ঘটতে পারে:
1. সুস্পষ্ট বাহিনী মোড়ানো
এটি !
অপারেটরের সাথে একটি onচ্ছিকভাবে করা হয়। উদাহরণ স্বরূপ:
let anOptionalString: String?
print(anOptionalString!) // <- CRASH
মারাত্মক ত্রুটি: একটি ptionচ্ছিক মান মোড়ক দেওয়ার সময় অপ্রত্যাশিতভাবে শূন্যতা পাওয়া গেছে
হিসাবে anOptionalString
হয় nil
এখানে, আপনি লাইন যেখানে আপনি এটি মোড়ক খোলা বাধ্য উপর একটি ক্র্যাশ পাবেন।
2. সুস্পষ্টভাবে মোড়ানো বিকল্পগুলি
এগুলি টাইপের পরে !
পরিবর্তে একটি দ্বারা সংজ্ঞায়িত করা হয় ?
।
var optionalDouble: Double! // this value is implicitly unwrapped wherever it's used
এই বিকল্পগুলির একটি মান রয়েছে বলে ধরে নেওয়া হয়। অতএব আপনি যখনই কোনও অন্তর্নিহিত wচ্ছিক accessচ্ছিক অ্যাক্সেস করবেন তখন তা স্বয়ংক্রিয়ভাবে আপনার জন্য মোড়কে মোড়ানো হবে। এতে যদি কোনও মান না থাকে তবে এটি ক্রাশ হবে।
print(optionalDouble) // <- CRASH
মারাত্মক ত্রুটি: একটি xpectedচ্ছিক মান সুস্পষ্টভাবে মোড়ক দেওয়ার সময় অপ্রত্যাশিতভাবে শূন্য হয়ে গেছে
কোন ভেরিয়েবল ক্রাশের কারণ হয়ে ওঠার ⌥জন্য, সংজ্ঞাটি দেখানোর জন্য ক্লিক করতে গিয়ে আপনি ধরে রাখতে পারেন , যেখানে আপনি alচ্ছিক প্রকারটি খুঁজে পেতে পারেন।
আইবিউলেটস, বিশেষত, সাধারণত অন্তর্নিহিত বিকল্পগুলি থাকে। এটি কারণ যে আপনার এক্সিব বা স্টোরিবোর্ডটি আউটলেটের সাথে রানটাইমটি শুরু করার পরে লিঙ্ক করবে । সুতরাং আপনার এটি নিশ্চিত করা উচিত যে আউটলেটগুলি লোড হওয়ার আগে আপনি অ্যাক্সেস করছেন না You আপনার স্টোরিবোর্ড / এক্সিব ফাইলের সাথে সংযোগগুলি সঠিক কিনা তাও আপনার পরীক্ষা করা উচিত, অন্যথায় মানগুলি nil
রানটাইমের সময় হবে এবং তাই যখন তারা স্পষ্টতই মোড়ানো না থাকে তখন ক্র্যাশ হয়ে যায় ensure । সংযোগগুলি ঠিক করার সময়, আপনার আউটলেটগুলি সংজ্ঞায়িত করে এমন কোডের লাইনগুলি মুছতে চেষ্টা করুন, তারপরে তাদের আবার সংযোগ করুন।
কখন আমাকে anচ্ছিক আন-র্যাপ জোর করা উচিত?
সুস্পষ্ট বাহিনী মোড়ানো
একটি সাধারণ নিয়ম হিসাবে, আপনাকে !
অপারেটরের সাথে কোনও বিকল্প wচ্ছিকভাবে মোড়ানোর বিষয়টি স্পষ্টভাবে জোর করা উচিত নয় । এমন কিছু ক্ষেত্রে থাকতে পারে যেখানে !
ব্যবহারটি গ্রহণযোগ্য হয় - তবে আপনি কেবলমাত্র এটি ব্যবহার করা উচিত যদি আপনি 100% নিশ্চিত হন যে alচ্ছিকর কোনও মান রয়েছে।
সেখানে থাকাকালীন পারে একটি উপলক্ষ্য যেখানে আপনি বল unwrapping ব্যবহার করতে পারেন, যেমন আপনি একটি জানি হতে সত্য যে একটি ঐচ্ছিক একটি মান ধারণ করে - সেখানে একটি নয় একক জায়গা যেখানে আপনি যা করতে পারেন না নিরাপদে মোড়ক খোলা যে ঐচ্ছিক পরিবর্তে।
সুস্পষ্টভাবে মোড়ানো বিকল্পগুলি ption
এই ভেরিয়েবলগুলি এমনভাবে ডিজাইন করা হয়েছে যাতে আপনার কোডটি পরে আপনি তাদের কার্যভার স্থগিত করতে পারেন। আপনার অ্যাক্সেস করার আগে তাদের কোনও মূল্য আছে তা নিশ্চিত করা আপনার দায়িত্ব। তবে, এগুলি জোর করে মোড়কানোর জন্য জড়িত থাকার কারণে, তারা এখনও অন্তর্নিহিতভাবে অনিরাপদ - যেমন তারা মনে করে যে আপনার মানটি নন-শূন্য, যদিও নিল নির্ধারণ করা বৈধ।
আপনার কেবলমাত্র শেষ অবলম্বন হিসাবে অন্তর্নিহিত বিকল্পগুলি ব্যবহার করা উচিত । যদি আপনি একটি অলস ভেরিয়েবল ব্যবহার করতে পারেন , বা কোনও ভেরিয়েবলের জন্য একটি ডিফল্ট মান সরবরাহ করতে পারেন - তবে আপনাকে স্পষ্টতভাবে মোড়কযুক্ত raচ্ছিক ব্যবহারের পরিবর্তে এটি করা উচিত।
তবে, হয় কয়েক পরিস্থিতিতে যেখানে পরোক্ষভাবে মোড়ানো optionals উপকারী , আর এখনও আপনার নিরাপদে তাদের unwrapping নীচে তালিকাভুক্ত হিসেবে বিভিন্ন উপায়ে ব্যবহার করতে পারবেন - কিন্তু আপনি উচিত সবসময় কারণে সতর্কতার সাথে তাদের ব্যবহার।
আমি কীভাবে বিকল্পগুলি মোকাবেলা করতে পারি?
Optionচ্ছিক কোনও মান রয়েছে কিনা তা যাচাই করার সহজ উপায়টি এর সাথে তুলনা করা nil
।
if anOptionalInt != nil {
print("Contains a value!")
} else {
print("Doesn’t contain a value.")
}
যাইহোক, বিকল্পগুলির সাথে কাজ করার সময় 99.9% সময়, আপনি আসলে এতে থাকা মানটি অ্যাক্সেস করতে চান, যদি এতে কোনও একটি থাকে contains এটি করতে, আপনি Oচ্ছিক বাঁধাই ব্যবহার করতে পারেন ।
Ptionচ্ছিক বাঁধাই
Ptionচ্ছিক বাঁধাই আপনাকে checkচ্ছিক কোনও মান রয়েছে কিনা তা যাচাই করতে দেয় - এবং আপনাকে মোড়কযুক্ত মানটিকে একটি নতুন ভেরিয়েবল বা ধ্রুবককে বরাদ্দ করতে দেয়। এটি সিনট্যাক্স ব্যবহার করে if let x = anOptional {...}
বা if var x = anOptional {...}
নির্ভর করে যদি আপনি এটি বাঁধার পরে নতুন ভেরিয়েবলের মান পরিবর্তন করতে চান।
উদাহরণ স্বরূপ:
if let number = anOptionalInt {
print("Contains a value! It is \(number)!")
} else {
print("Doesn’t contain a number")
}
এটি যা করে তা প্রথমে পরীক্ষা করে দেখুন যে alচ্ছিকটিতে একটি মান রয়েছে। যদি এটি হয় , তবে 'মোড়কযুক্ত' মানটি একটি নতুন ভেরিয়েবল ( number
) - এ নির্ধারিত হয়েছে - যা আপনি নির্দ্বিধায় ব্যবহার করতে পারেন যেমন এটি অ-alচ্ছিক। Alচ্ছিকতে যদি কোনও মান থাকে না , তবে অন্য অনুচ্ছেদটি আহ্বান করা হবে, যেমনটি আপনি আশা করেছিলেন।
Alচ্ছিক বাঁধাই সম্পর্কে ঝরঝরে কী, আপনি একই সময়ে একাধিক বিকল্প আনারপেট করতে পারেন। আপনি কেবল কমা দিয়ে বিবৃতিগুলি পৃথক করতে পারেন। সমস্ত বিকল্প অপরিবর্তিত থাকলে বিবৃতিটি সফল হবে।
var anOptionalInt : Int?
var anOptionalString : String?
if let number = anOptionalInt, let text = anOptionalString {
print("anOptionalInt contains a value: \(number). And so does anOptionalString, it’s: \(text)")
} else {
print("One or more of the optionals don’t contain a value")
}
আরেকটি ঝরঝরে কৌশলটি হ'ল আপনি এটি মুছে ফেলার পরে মানটির একটি নির্দিষ্ট শর্ত পরীক্ষা করতে কমা ব্যবহার করতে পারেন।
if let number = anOptionalInt, number > 0 {
print("anOptionalInt contains a value: \(number), and it’s greater than zero!")
}
যদি একটি বিবৃতিতে alচ্ছিক বাঁধাই ব্যবহার করে তবেই কেবল ধরা পড়বে যে আপনি কেবলমাত্র বিবৃতিটির ক্ষেত্রের মধ্যে থেকে মোড়কানো মানটি অ্যাক্সেস করতে পারবেন। আপনার যদি বিবৃতিটির সুযোগের বাইরে থেকে মানটির অ্যাক্সেসের প্রয়োজন হয় তবে আপনি গার্ড স্টেটমেন্ট ব্যবহার করতে পারেন ।
একজন গার্ড বিবৃতি আপনি সাফল্যের জন্য একটি শর্ত সংজ্ঞায়িত করতে পারবেন - এবং যদি সেই শর্ত পূরণ করা হয় বর্তমান সুযোগ শুধুমাত্র নির্বাহ চলতে থাকবে। এগুলি সিনট্যাক্স দিয়ে সংজ্ঞায়িত করা হয় guard condition else {...}
।
সুতরাং, anচ্ছিক বাঁধাইয়ের সাথে এগুলি ব্যবহার করতে, আপনি এটি করতে পারেন:
guard let number = anOptionalInt else {
return
}
(নোট করুন যে প্রহরী সংস্থার মধ্যে, বর্তমানে কার্যকরকারী কোডের পরিধিটি থেকে বেরিয়ে যাওয়ার জন্য আপনাকে অবশ্যই নিয়ন্ত্রণের স্থানান্তর বিবৃতিগুলির একটি ব্যবহার করতে হবে )।
যদি anOptionalInt
কোনও মান থাকে, তবে এটি মোড়ানো হবে এবং নতুন number
ধ্রুবককে নির্ধারিত হবে । গার্ডের পরে কোডটি কার্যকর করা চালিয়ে যাবে। যদি এটিতে কোনও মান না থাকে - গার্ডটি বন্ধনীগুলির মধ্যে কোডটি কার্যকর করে, যা নিয়ন্ত্রণের স্থানান্তর করতে পরিচালিত করে, যাতে তত্ক্ষণাত কোড কার্যকর করা হবে না।
প্রহরী বিবৃতি সম্পর্কে আসল ঝরঝরে জিনিস হ'ল মোড়কযুক্ত মানটি এখন বিবৃতি অনুসরণকারী কোডে ব্যবহারের জন্য উপলব্ধ (যেমন আমরা জানি যে ভবিষ্যতের কোডটি কেবলমাত্র theচ্ছিকের মান থাকলে কার্যকর করতে পারে)। বিবৃতিগুলি যদি একাধিক বাসা বাঁধে তৈরি করা হয় 'ডুমের পিরামিডস' নির্মূল করার জন্য এটি দুর্দান্ত ।
উদাহরণ স্বরূপ:
guard let number = anOptionalInt else {
return
}
print("anOptionalInt contains a value, and it’s: \(number)!")
গার্ডগুলি একই ঝরঝরে কৌশলগুলিকে সমর্থন করে যা if স্টেটমেন্টটি সমর্থন করে যেমন একই সময়ে একাধিক বিকল্পকে মোড়ানো এবং where
ধারাটি ব্যবহার করে ।
আপনি যদি কোনও বা গার্ডের বিবৃতি ব্যবহার করেন তা পুরোপুরি নির্ভর করে যে কোনও ভবিষ্যতের কোডের একটি মান থাকতে alচ্ছিক প্রয়োজন কিনা on
নিল কোলেসিং অপারেটর
নীল কোয়ালেসিং অপারেটর একটি ছিমছাম সাধারণভাবে সংক্ষেপে সংস্করণ তিন শর্তসাপেক্ষ অপারেটর , প্রাথমিকভাবে অ optionals করার optionals রূপান্তর করতে পরিকল্পিত। এটির বাক্য গঠন রয়েছে a ?? b
, যেখানে a
একটি optionচ্ছিক প্রকার এবং b
এটি একই ধরণের a
(যদিও সাধারণত অ-optionচ্ছিক)।
এটি মূলত আপনাকে বলতে দেয় "যদি a
কোনও মান থাকে তবে এটি মোড়ক করুন। যদি তা না হয় তবে b
পরিবর্তে ফিরে আসুন। উদাহরণস্বরূপ, আপনি এটি ব্যবহার করতে পারেন:
let number = anOptionalInt ?? 0
এটি ধরণের number
ধ্রুবককে সংজ্ঞায়িত করবে Int
, এর মধ্যে মান রয়েছে anOptionalInt
, যদি এটিতে কোনও মান থাকে, বা 0
অন্যথায়।
এটি কেবল শর্টহ্যান্ডের জন্য:
let number = anOptionalInt != nil ? anOptionalInt! : 0
.চ্ছিক চেইনিং
কোনও পদ্ধতিতে কল করতে বা propertyচ্ছিক কোনও সম্পত্তি অ্যাক্সেস করতে আপনি alচ্ছিক চেইনিং ব্যবহার করতে পারেন । এটি ভেরিয়েবলের নামটি ?
ব্যবহার করার সাথে সাথে প্রত্যাহার করেই করা হয় ।
উদাহরণস্বরূপ, বলুন যে আমাদের একটি ভেরিয়েবল আছে, একটি foo
ofচ্ছিক Foo
উদাহরণ টাইপ করুন ।
var foo : Foo?
যদি আমরা কোনও পদ্ধতিতে কল করতে চেয়েছিলাম foo
যে কোনও কিছুই ফিরে আসে না, আমরা কেবল এটি করতে পারি:
foo?.doSomethingInteresting()
যদি foo
কোনও মান থাকে, তবে এই পদ্ধতিটি এতে কল করা হবে। যদি এটি না ঘটে তবে খারাপ কিছু ঘটবে না - কোডটি কেবল কার্যকর করা চালিয়ে যাবে।
( nil
উদ্দেশ্য-সি তে বার্তা প্রেরণের অনুরূপ আচরণ )
এই কারণে বৈশিষ্ট্য পাশাপাশি কল পদ্ধতি সেট করতেও এটি ব্যবহার করা যেতে পারে। উদাহরণ স্বরূপ:
foo?.bar = Bar()
আবার, কিছুই খারাপ এখানে ঘটবে যদি foo
হয় nil
। আপনার কোডটি কার্যকরভাবে চালানো চালিয়ে যাবে।
Neচ্ছিক শৃঙ্খলা যা আপনাকে করতে দেয় এমন আরেকটি ঝরঝরে কৌশলটি কোনও সম্পত্তি সেট করা বা কোনও পদ্ধতি কল করা সফল হয়েছিল কিনা তা যাচাই করে দেখানো হয়। আপনি রিটার্ন মানটি তুলনা করে এটি করতে পারেন nil
।
(এটি কারণ এমন কোনও পদ্ধতির Void?
পরিবর্তে anythingচ্ছিক মান ফিরে আসবে Void
যা কোনও কিছুই ফেরত না)
উদাহরণ স্বরূপ:
if (foo?.bar = Bar()) != nil {
print("bar was set successfully")
} else {
print("bar wasn’t set successfully")
}
যাইহোক, বৈশিষ্ট্যগুলি অ্যাক্সেস করার চেষ্টা করার সময় বা মানগুলি ফেরত দেওয়ার পদ্ধতিগুলিতে কিছুটা আরও জটিল হয়ে ওঠে। যেহেতু foo
isচ্ছিক, এখান থেকে ফিরে আসা যে কোনও কিছুই alচ্ছিকও হবে। এটির সাথে মোকাবিলা করার জন্য, আপনি উপরের যে কোনও একটি পদ্ধতি ব্যবহার করে ফিরে আসা বিকল্পগুলি আন-মোড়ক করতে পারেন - অথবা foo
পদ্ধতিগুলি অ্যাক্সেস করার আগে বা মানগুলি ফেরত দেওয়ার পদ্ধতিগুলিতে কল করার আগে নিজেকে মোড়ক থেকে মুক্ত করতে পারেন।
এছাড়াও, নামটি যেমন বোঝায়, আপনি এই বিবৃতিগুলি একসাথে 'চেইন' করতে পারেন। এর অর্থ হ'ল যদি foo
একটি optionচ্ছিক সম্পত্তি থাকে baz
, যার একটি সম্পত্তি থাকে qux
- তবে আপনি নিম্নলিখিতটি লিখতে পারেন:
let optionalQux = foo?.baz?.qux
আবার, কারণ foo
এবং baz
alচ্ছিক, এ থেকে প্রাপ্ত মানটি qux
সর্বদা একটি alচ্ছিক হবে তা নির্বিশেষে qux
নিজেই optionচ্ছিক।
map
এবং flatMap
বিকল্পগুলির সাথে একটি প্রায়শই নিহিত বৈশিষ্ট্য হ'ল map
এবং flatMap
কার্যগুলি ব্যবহার করার ক্ষমতা । এগুলি আপনাকে alচ্ছিক ভেরিয়েবলগুলিতে অ-alচ্ছিক রূপান্তর প্রয়োগ করতে দেয়। Anচ্ছিকের যদি কোনও মান থাকে তবে আপনি এটিতে প্রদত্ত রূপান্তরটি প্রয়োগ করতে পারেন। যদি এর কোনও মান না থাকে তবে তা থেকে যায় nil
।
উদাহরণস্বরূপ, ধরা যাক আপনার একটি alচ্ছিক স্ট্রিং রয়েছে:
let anOptionalString:String?
এতে map
ফাংশনটি প্রয়োগ করে - আমরা stringByAppendingString
ফাংশনটি এটি অন্য স্ট্রিংয়ের সাথে যুক্ত করতে ব্যবহার করতে পারি ।
যেহেতু stringByAppendingString
একটি অ-alচ্ছিক স্ট্রিং আর্গুমেন্ট লাগে তাই আমরা আমাদের alচ্ছিক স্ট্রিংটি সরাসরি ইনপুট করতে পারি না। তবে, ব্যবহার করে map
, আমরা কোনও মান stringByAppendingString
থাকলে ব্যবহার করার অনুমতি ব্যবহার করতে পারি anOptionalString
।
উদাহরণ স্বরূপ:
var anOptionalString:String? = "bar"
anOptionalString = anOptionalString.map {unwrappedString in
return "foo".stringByAppendingString(unwrappedString)
}
print(anOptionalString) // Optional("foobar")
তবে, anOptionalString
মান না থাকলে, map
ফিরে আসবে nil
। উদাহরণ স্বরূপ:
var anOptionalString:String?
anOptionalString = anOptionalString.map {unwrappedString in
return "foo".stringByAppendingString(unwrappedString)
}
print(anOptionalString) // nil
flatMap
অনুরূপভাবে কাজ করে map
, বাদে এটি আপনাকে ক্লোজর বডি থেকে অন্য optionচ্ছিক ফিরে আসতে দেয় । এর অর্থ আপনি একটি প্রক্রিয়াতে একটি alচ্ছিক ইনপুট করতে পারেন যার জন্য একটি অ-alচ্ছিক ইনপুট প্রয়োজন, তবে anচ্ছিক নিজেই আউটপুট করতে পারেন।
try!
ডু-ট্রাই-ক্যাচের সাথে সুইফ্টের ত্রুটি হ্যান্ডলিং সিস্টেমটি নিরাপদে ব্যবহার করা যেতে পারে :
do {
let result = try someThrowingFunc()
} catch {
print(error)
}
যদি someThrowingFunc()
কোনও ত্রুটি নিক্ষেপ করে, ত্রুটিটি নিরাপদে catch
ব্লকে ধরা পড়বে ।
error
আপনি catch
ব্লকে যে ধ্রুবকটি দেখছেন তা আমাদের দ্বারা ঘোষণা করা হয়নি - এটি স্বয়ংক্রিয়ভাবে উত্পন্ন হয় catch
।
আপনি error
নিজেই ঘোষণা করতে পারেন , এটি একটি দরকারী বিন্যাসে কাস্ট করতে সক্ষম হওয়ার সুবিধা রয়েছে, উদাহরণস্বরূপ:
do {
let result = try someThrowingFunc()
} catch let error as NSError {
print(error.debugDescription)
}
try
এই পদ্ধতি ব্যবহার করে নিক্ষেপ ফাংশন থেকে আসা ত্রুটিগুলি চেষ্টা করার, ধরা ও পরিচালনা করার উপযুক্ত উপায়।
এর রয়েছে try?
যা ত্রুটি শোষণ:
if let result = try? someThrowingFunc() {
// cool
} else {
// handle the failure, but there's no error information available
}
তবে সুইফ্টের ত্রুটি পরিচালনা ব্যবস্থাও এর সাথে "জোর করে চেষ্টা" করার একটি উপায় সরবরাহ করে try!
:
let result = try! someThrowingFunc()
এই পোস্টে ব্যাখ্যা করা ধারণাগুলি এখানেও প্রয়োগ হয়: যদি কোনও ত্রুটি নিক্ষেপ করা হয় তবে অ্যাপ্লিকেশনটি ক্রাশ হবে।
আপনি কেবল তখনই ব্যবহার try!
করতে পারেন যদি আপনি প্রমাণ করতে পারেন যে এর ফলাফলটি আপনার প্রসঙ্গে কখনও ব্যর্থ হবে না - এবং এটি খুব বিরল।
বেশিরভাগ সময় আপনি সম্পূর্ণ কর-চেষ্টা-ক্যাচ সিস্টেমটি ব্যবহার করবেন - এবং theচ্ছিক একটি, try?
বিরল ক্ষেত্রে যেখানে ত্রুটি পরিচালনা করা গুরুত্বপূর্ণ নয়।
সম্পদ