সুস্পষ্টভাবে মোড়কযুক্ত বিকল্পগুলির ব্যবহারের ক্ষেত্রে আমি বর্ণনা দেওয়ার আগে, আপনার সুইফটিতে Oচ্ছিক এবং সুস্পষ্টভাবে মোড়কযুক্ত বিকল্পগুলি কী তা বোঝা উচিত। আপনি যদি তা না করেন তবে আমি আপনাকে প্রথমে বিকল্পগুলিতে আমার নিবন্ধটি পড়ার পরামর্শ দিচ্ছি
যখন একটি সুস্পষ্টভাবে মোড়কযুক্ত Useচ্ছিক ব্যবহার করতে হয়
দুটি প্রধান কারণ রয়েছে যে কেউ একটি সুস্পষ্টভাবে মোড়কানো ptionচ্ছিক তৈরি করতে পারে। সমস্ত একটি ভেরিয়েবল সংজ্ঞায়িত করতে হবে যা কখনও অ্যাক্সেস করা হবে না যখন nil
অন্যথায়, সুইফ্ট সংকলক সর্বদা আপনাকে একটি ptionচ্ছিককে স্পষ্টতই মোড়ক করতে বাধ্য করবে।
1. একটি ধ্রুবক যা আরম্ভের সময় সংজ্ঞায়িত করা যায় না
প্রতিটি সদস্য ধ্রুবকের অবশ্যই সময় সূচনা সম্পন্ন হওয়ার পরে একটি মান থাকতে হবে। কখনও কখনও, প্রারম্ভকালীন সময়ে একটি ধ্রুবককে তার সঠিক মান দিয়ে আরম্ভ করা যায় না, তবে এটি অ্যাক্সেস হওয়ার আগে একটি মান থাকার গ্যারান্টি দেওয়া যেতে পারে।
একটি ptionচ্ছিক পরিবর্তনশীল ব্যবহার করা এই সমস্যার আশেপাশে আসে কারণ একটি ptionচ্ছিক স্বয়ংক্রিয়ভাবে এর সাথে আরম্ভ হয় nil
এবং অবশেষে এটির যে মানটি থাকবে তা এখনও অপরিবর্তনীয়। যাইহোক, আপনি যখন নিশ্চিতভাবে জানেন যে কোনও পরিবর্তনশীল নিরবচ্ছিন্নভাবে নিরবচ্ছিন্ন হয়ে পড়ার মতো ব্যথা হতে পারে। সুস্পষ্টভাবে মোড়কানো বিকল্পগুলি অতিরিক্ত সুবিধা যুক্ত বিকল্প হিসাবে একই সুবিধাগুলি অর্জন করে যে কোনও ব্যক্তিকে এটিকে সর্বত্র পরিষ্কারভাবে আবদ্ধ করতে হবে না।
এর একটি দুর্দান্ত উদাহরণ হ'ল যখন সদস্যের ভেরিয়েবলটি কোনও ইউআইভিউ সাবক্লাসে ভিউ লোড না হওয়া পর্যন্ত শুরু করা যায় না:
class MyView: UIView {
@IBOutlet var button: UIButton!
var buttonOriginalWidth: CGFloat!
override func awakeFromNib() {
self.buttonOriginalWidth = self.button.frame.size.width
}
}
এখানে, ভিউটি লোড না হওয়া পর্যন্ত আপনি বোতামের মূল প্রস্থ গণনা করতে পারবেন না, তবে আপনি জানেন যে awakeFromNib
ভিউতে অন্য কোনও পদ্ধতির আগে ডাকা হবে (সূচনাকরণ ব্যতীত)। মানটিকে আপনার ক্লাসে নির্বিঘ্নে নিরবচ্ছিন্নভাবে জোর করে চাপানোর পরিবর্তে, আপনি এটিকে একটি স্পষ্টতভাবে মোড়কযুক্ত asচ্ছিক হিসাবে ঘোষণা করতে পারেন।
২. যখন আপনার অ্যাপ্লিকেশন কোনও পরিবর্তনশীল জীব থেকে পুনরুদ্ধার করতে পারে না nil
এটি অত্যন্ত বিরল হওয়া উচিত, তবে যদি আপনার অ্যাপ্লিকেশনটি চলতে না পারে তবে যদি কোনও ভেরিয়েবল nil
অ্যাক্সেস পাওয়া যায় তবে এটির পরীক্ষার বিরক্তি করা সময় নষ্ট হবে nil
। সাধারণত আপনি একটি শর্তে যে একেবারে সত্য আপনার অ্যাপ চলমান অব্যাহত রাখার জন্য জন্য হতে হবে বলার আছে, আপনি একটি ব্যবহার করেন assert
। একটি সুস্পষ্টভাবে মোড়কযুক্ত alচ্ছিক এটিতে নিখরচায় নির্মিত জন্য একটি পদক্ষেপ আছে। তারপরেও, প্রায়শই alচ্ছিক আনপ্রেট করা ভাল হয় এবং এটি শূন্য হলে আরও বর্ণনামূলক দৃsert় ব্যবহার করা উচিত।
যখন একটি স্পষ্টভাবে মোড়কযুক্ত Useচ্ছিক ব্যবহার করবেন না
1. অলস গণনা সদস্য ভেরিয়েবল
কখনও কখনও আপনার একটি সদস্য পরিবর্তনশীল থাকে যা কখনই শূন্য হওয়া উচিত নয়, তবে এটি আরম্ভের সময় সঠিক মানটিতে সেট করা যায় না। একটি সমাধান হ'ল একটি সুস্পষ্টভাবে মোড়ানো Oচ্ছিক useচ্ছিক ব্যবহার করা, তবে একটি অলস ভেরিয়েবল ব্যবহার করার একটি আরও ভাল উপায়:
class FileSystemItem {
}
class Directory : FileSystemItem {
lazy var contents : [FileSystemItem] = {
var loadedContents = [FileSystemItem]()
// load contents and append to loadedContents
return loadedContents
}()
}
এখন, সদস্য ভেরিয়েবলটি contents
প্রথমবার অ্যাক্সেস না করা পর্যন্ত শুরু করা হয় না। এটি প্রাথমিক মান গণনা করার আগে শ্রেণিকে সঠিক অবস্থায় প্রবেশের সুযোগ দেয়।
দ্রষ্টব্য: এটি উপরের থেকে # 1 টি বিপরীত বলে মনে হতে পারে। তবে একটি গুরুত্বপূর্ণ পার্থক্য করা উচিত। buttonOriginalWidth
উপরে পরিবর্তন করার আগে সম্পত্তি অ্যাক্সেস করা হয় বোতাম প্রস্থ বিরত রাখার জন্য viewDidLoad সময় সেট করতে হবে।
2. অন্য কোথাও
বেশিরভাগ অংশে, সুস্পষ্টভাবে মোড়কযুক্ত বিকল্পগুলি এড়ানো উচিত কারণ যদি ভুলভাবে ব্যবহার করা হয়, আপনার অ্যাক্সেস করার সময় আপনার পুরো অ্যাপটি ক্র্যাশ হয়ে যাবে nil
। আপনি যদি ভেরিয়েবলটি শূন্য করতে পারেন কিনা সে সম্পর্কে আপনি যদি নিশ্চিত না হন তবে সাধারণ aচ্ছিক ব্যবহারের জন্য সর্বদা ডিফল্ট। এমন কোনও পরিবর্তনশীল মোড়ানো যা nil
অবশ্যই কখনও খুব বেশি ক্ষতি করে না।
if someOptional
।