"প্রোটোকল ... কেবলমাত্র জেনেরিক সীমাবদ্ধতা হিসাবে ব্যবহৃত হতে পারে কারণ এতে স্ব বা সম্পর্কিত ধরণের প্রয়োজনীয়তা রয়েছে" এর অর্থ কী?


123

আমি সুইফটে একটি কাস্টম প্রোটোকলে কীড করা একটি অভিধান (আসলে একটি হ্যাশসেট ) তৈরি করার চেষ্টা করছি , তবে এটি শিরোনামে আমাকে ত্রুটি দিচ্ছে:

প্রোটোকল 'মাইপ্রোটোকল' কেবল জেনেরিক সীমাবদ্ধতা হিসাবে ব্যবহৃত হতে পারে কারণ এতে স্ব বা সম্পর্কিত সম্পর্কিত প্রয়োজনীয়তা রয়েছে

এবং আমি এর মাথা বা লেজ বানাতে পারি না।

protocol Observing: Hashable { }

var observers = HashSet<Observing>()


@ jtbandes এটি কোনও সদৃশ নয়। আমি জিজ্ঞাসা করছি ত্রুটি বার্তার আসলে কী বোঝায়। "স্ব বা সম্পর্কিত ধরণের প্রয়োজনীয়তা" কী?
ডিভাইস 1

উত্তর:


90

প্রোটোকল প্রোটোকল Observingথেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয় Hashableযা প্রোটোকল থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয় Equatable। প্রোটোকলের Equatableনিম্নলিখিত প্রয়োজনীয়তা রয়েছে:

func ==(lhs: Self, rhs: Self) -> Bool

এবং এর Selfভিতরে কোথাও থাকা একটি প্রোটোকল কোনও ধরণের সীমাবদ্ধতা বাদে কোথাও ব্যবহার করা যায় না।

এখানে একটি অনুরূপ প্রশ্ন।


7
... কারণ সংকলকটি উভয় পক্ষের কাছে একই ধরণের বিষয়টি নিশ্চিত করতে হবে তবে প্রোটোকল কেবল এটি চুক্তির সাথে মিলিত হয়েছে তা নিশ্চিত করে। আমি দেখি. তবুও, মনে হচ্ছে Equatableঅগত্যা বোঝানো উচিত নয় Equatableযেহেতু হ্যাশ কোড উত্পন্ন করার জন্য এটি কঠোরভাবে প্রয়োজনীয় নয়।
ডিভাইস 1

4
ওহ এটি অপেক্ষা করে না, কারণ Dictionaryপ্রদত্ত বস্তুটি সত্যই সঠিক কী কিনা তা জানতে সক্ষম হওয়া দরকার কারণ দুটি পৃথক বস্তুর পক্ষে একই হ্যাশ কোড উত্পন্ন করা সম্ভব। হুম, এটা কিছুটা কৃপণ। সুতরাং এখানে সমস্যা সত্যিই সঙ্গে হয় Equatable
ডিভাইস 1

4
শিরোনামে অ্যালেক্সিস গ্যালাগারের দুর্দান্ত উপস্থাপনাটি দেখুন: অ্যাসোসিয়েটেড
টাইপের

@ ফিনেচেনহেল্প এই জন্য ধন্যবাদ 👍👍 দারুন ভিডিও!
ডিভাইস 1

11

এটি সমাধান করার জন্য আপনি জেনেরিকগুলি ব্যবহার করতে পারেন। এই উদাহরণ বিবেচনা করুন:

class GenericClass<T: Observing> {
   var observers = HashSet<T>()
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.