আমি সুইফটে ব্যবহারের জন্য উপযুক্ত সিঙ্গলটন মডেলটি নিয়ে কাজ করার চেষ্টা করছি। এখনও অবধি, আমি একটি নন-থ্রেড নিরাপদ মডেল হিসাবে কাজ করতে সক্ষম হয়েছি:
class var sharedInstance: TPScopeManager {
get {
struct Static {
static var instance: TPScopeManager? = nil
}
if !Static.instance {
Static.instance = TPScopeManager()
}
return Static.instance!
}
}
স্ট্যাটিক স্ট্রাক্টে সিঙ্গেলটন দৃষ্টান্তটি মোছার ক্ষেত্রে এমন একক উদাহরণের অনুমতি দেওয়া উচিত যা জটিল নামকরণের স্কিমিং ছাড়াই সিঙ্গেলটন দৃষ্টান্তের সাথে সংঘর্ষে না আসে এবং এটি জিনিসগুলি মোটামুটি ব্যক্তিগত করে তোলে। স্পষ্টতই যদিও, এই মডেলটি থ্রেড-নিরাপদ নয়। তাই আমি dispatch_once
পুরো জিনিসটিতে যুক্ত করার চেষ্টা করেছি :
class var sharedInstance: TPScopeManager {
get {
struct Static {
static var instance: TPScopeManager? = nil
static var token: dispatch_once_t = 0
}
dispatch_once(Static.token) { Static.instance = TPScopeManager() }
return Static.instance!
}
}
তবে আমি dispatch_once
লাইনে একটি সংকলক ত্রুটি পেয়েছি :
এক্সপ্রেশন এর টাইপ 'শূন্য' টাইপ '()' তে রূপান্তর করতে পারবেন না
আমি সিনট্যাক্সের বিভিন্ন বিভিন্ন প্রকার চেষ্টা করেছি, তবে তাদের সবার একই ফলাফল বলে মনে হচ্ছে:
dispatch_once(Static.token, { Static.instance = TPScopeManager() })
dispatch_once
সুইফট ব্যবহারের সঠিক ব্যবহার কী ? আমি প্রাথমিকভাবে ভেবেছিলাম ()
ত্রুটি বার্তায় থাকার কারণে সমস্যাটি ব্লকের সাথে রয়েছে , তবে আমি যত বেশি এটি দেখব ততই আমি মনে করি এটি dispatch_once_t
সঠিকভাবে সংজ্ঞায়িত হওয়ার বিষয় হতে পারে ।
@lazy
থ্রেড নিরাপদ হওয়া উচিত।
Static.instance = TPScopeManager()
উদাহরণ টাইপ জোর করে। যদি আপনি Static.instance = self()
প্রয়োজনীয় প্রাথমিকের সাথে কিছু ব্যবহার করেন তবে উপযুক্ত ধরণের শ্রেণি তৈরি করা হবে। তবুও, এবং এই গুরুত্বপূর্ণ বিষয়টি লক্ষ্য করা যায়, শ্রেণিবদ্ধের সমস্ত দৃষ্টান্তের জন্য কেবল একবার! আরম্ভ করার জন্য প্রথম টাইপ হ'ল সমস্ত দৃষ্টান্তের জন্য টাইপ সেট। আমি মনে করি না উদ্দেশ্য-সি একই আচরণ করেছে ved