উদ্দেশ্য-সি রানটাইম: ক্লাস প্রোটোকলের সাথে সঙ্গতি রাখে কিনা তা যাচাই করার সর্বোত্তম উপায়?


171

আমার একটি ক্লাস রয়েছে (তবে কোনও উদাহরণ নেই) এবং এটি কোনও নির্দিষ্ট প্রোটোকলের সাথে খাপ খায় কিনা তা জানতে হবে। তবে, ক্লাসটি বেশ কয়েকবার উপক্লাস হতে পারে এবং ক্লাস_কনফর্মস টোপ্রোটোকল () সুপারক্লাসে ঘোষিত প্রোটোকল উপেক্ষা করে।

আমি কেবল ক্লাস_জেটসুপারক্লাস () ব্যবহার করতে পারি এবং সুপারক্লাসটি শূন্য না হওয়া পর্যন্ত ক্রমবর্ধমান শ্রেণিবিন্যাসের সমস্ত ক্লাস চেক করতে পারি। তবে আমি আশ্চর্য হই যে যদি গভীরভাবে নেস্টেড বর্গ শ্রেণিবিন্যাসের জন্য এটি অদক্ষ হতে পারে, এবং সম্ভবত এটি করার আরও ভাল উপায় আছে?

অন্য কথায়, এনএসবজেক্ট পদ্ধতিটি অবজেক্ট-সি রানটাইম পদ্ধতিগুলি ব্যবহার করে কীভাবে কার্যকরভাবে টুপ্রোটোকলকে সর্বোত্তমভাবে প্রয়োগ করা হয় যাতে এটি সুপারক্লাসে প্রোটোকল খুঁজে পায়?

 [myObject conformsToProtocol:@protocol(MyProtocol)];

আমি যদি বার বার ক্রমবর্ধমান শ্রেণিবিন্যাসের সাথে উঠে আসার সাথে সঠিক পথে থাকি তবে আমাকে জানান।

উত্তর:


309

ডক্স অনুসারে ,

[MyClass conformsToProtocol:@protocol(MyProtocol)];

কাজ করা উচিত.


4
তুমি ঠিক বলছো. এটি দেরি হয়ে গেছে এবং কোনও কোড সমাপ্তির পরামর্শ Xcode দ্বারা দেওয়া হয়নি। আমি ক্লাসের সংজ্ঞাটি পরীক্ষা করে দেখেছি যে এটি "টাইপডেফ স্ট্রাক্ট অ্যাজেক্ট_ক্লাস * ক্লাস" ছিলাম আমি এনএসবজেক্ট শ্রেণির রেফারেন্স চেক করিনি।
শিখুন কোকোস

কোনও ক্লাসের পরিবর্তে কোনও দৃষ্টান্তে এটি করার কোনও উপায় আছে কি? আমার self.delegateপ্রয়োগ একাধিক প্রোটোকল এবং আমি এটি পরীক্ষা করতে চাই যে এটি শ্রেণীর চেয়ে অন্যদের সাথে সামঞ্জস্য হয় কিনা।
কনরাড পিয়াসিক

@KonradPiascik শুধু পরিবর্তে উদাহরণস্বরূপ তে এটি কল: [someObject conformsToProtocol:@protocol(MyProtocol)]
ওয়েভা

3

বা, যদি এটি সাধারণ পয়েন্টার হয় তবে:

Class<MyProtocol> someClassPointer = nil;

তুমি ব্যবহার করতে পার:

[someClassPointer.class conformsToProtocol:@protocol(MyProtocol)];
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.