আপডেট করুন: থেকে সুইফট 2.2 লগিন পরিবর্তন করুন (মার্চ 21, 2016 মুক্তি):
অনুপযুক্ত বা থ্রোিং হিসাবে ঘোষিত মনোনীত শ্রেণি প্রারম্ভিকরা অবজেক্টটি সম্পূর্ণরূপে আরম্ভ করার আগে যথাক্রমে শূন্যতা বা ত্রুটি নিক্ষেপ করতে পারে।
সুইফট ২.১ এবং তার আগের:
অ্যাপলের ডকুমেন্টেশন (এবং আপনার সংকলক ত্রুটি) অনুসারে, কোনও ক্লাসে nil
কোনও প্রাপ্য আরম্ভকারী থেকে ফিরে আসার আগে অবশ্যই তার সমস্ত সঞ্চিত বৈশিষ্ট্য শুরু করতে হবে:
ক্লাসগুলির জন্য, তবে একটি অনুপযুক্ত আরম্ভকারী কেবল তখনই শ্রেণীর দ্বারা প্রবর্তিত সমস্ত সঞ্চিত সম্পত্তি প্রাথমিক মান হিসাবে সেট করা হয়ে যায় এবং যে কোনও আরম্ভকারী প্রতিনিধি সংঘটিত হওয়ার পরে কেবল একটি সূচনা ব্যর্থতা ট্রিগার করতে পারে।
দ্রষ্টব্য: এটি কাঠামোগুলি এবং গণনার জন্য আসলে কাজ করে, কেবল ক্লাস নয় not
আদ্যক্ষর ব্যর্থ হওয়ার আগে আরম্ভ করা যায় না এমন সঞ্চিত বৈশিষ্ট্যগুলি হ্যান্ডেল করার প্রস্তাবিত উপায় হ'ল এগুলিকে স্পষ্টতভাবে মোড়কযুক্ত বিকল্প হিসাবে ঘোষণা করা।
দস্তাবেজ থেকে উদাহরণ:
class Product {
let name: String!
init?(name: String) {
if name.isEmpty { return nil }
self.name = name
}
}
উপরের উদাহরণে, পণ্য শ্রেণীর নাম বৈশিষ্ট্যটি একটি স্পষ্টভাবে মোড়কযুক্ত alচ্ছিক স্ট্রিং প্রকার (স্ট্রিং!) হিসাবে সংজ্ঞায়িত করা হয়। কারণ এটি একটি optionচ্ছিক প্রকারের, এর অর্থ এটি হ'ল নামের শুরুতে শুরুর আগে একটি নির্দিষ্ট মান নির্ধারিত হওয়ার আগে শূন্যের একটি ডিফল্ট মান থাকে। পরিবর্তে শূন্যের এই ডিফল্ট মানটির অর্থ হ'ল পণ্য শ্রেণীর দ্বারা প্রবর্তিত সমস্ত বৈশিষ্ট্যের একটি বৈধ প্রাথমিক মান রয়েছে। ফলস্বরূপ, প্রডাক্টের জন্য অনুপলব্ধ আরম্ভকারী আরম্ভকারীর মধ্যে নামের বৈশিষ্ট্যের একটি নির্দিষ্ট মান নির্ধারিত করার আগে, খালি স্ট্রিংটি পাস করা হয় তবে আরম্ভকারীটির শুরুতে একটি সূচনা ব্যর্থতা ট্রিগার করতে পারে।
আপনার ক্ষেত্রে, তবে কেবল userName
হিসাবে সংজ্ঞায়িত করা String!
সংকলন ত্রুটিটি ঠিক করে না কারণ আপনার বেস ক্লাসে বৈশিষ্ট্যগুলি আরম্ভ করার বিষয়ে আপনাকে এখনও চিন্তা করতে হবে NSObject
,। ভাগ্যক্রমে, এ userName
হিসাবে সংজ্ঞায়িত করে String!
, আপনি আসলে আপনার super.init()
আগে কল করতে পারেন return nil
যা আপনার NSObject
বেস ক্লাস শুরু করবে এবং সংকলনের ত্রুটিটি ঠিক করবে।
class User: NSObject {
let userName: String!
let isSuperUser: Bool = false
let someDetails: [String]?
init?(dictionary: NSDictionary) {
super.init()
if let value = dictionary["user_name"] as? String {
self.userName = value
}
else {
return nil
}
if let value: Bool = dictionary["super_user"] as? Bool {
self.isSuperUser = value
}
self.someDetails = dictionary["some_details"] as? Array
}
}
canSetCalculableProperties
আমার ইনিশিয়ালকে এমন বৈশিষ্ট্য গণনা করতে সক্ষম করে যা ফ্লাইতে তৈরি করা যায় না বা তৈরি করা যায় না। উদাহরণস্বরূপ, যদি কোনওdateCreated
কী অনুপস্থিত থাকে এবংcanSetCalculableProperties
প্যারামিটারটি সত্য বলে আমি ফ্লাইতে সম্পত্তি সেট করতে পারি তবে আমি কেবল এটি বর্তমান তারিখটিতে সেট করেছি।