Methodsচ্ছিক পদ্ধতিগুলির সাথে কীভাবে একটি প্রোটোকল তৈরি করবেন?


133

আমি আইফোন এসডিকে সংজ্ঞায়িত বিভিন্ন প্রোটোকলগুলিতে optionচ্ছিক চিহ্নিত পদ্ধতিগুলি লক্ষ্য করেছি, যেমন UIActionSheetDelegateউদাহরণস্বরূপ প্রোটোকল।

আমি কীভাবে নিজের একটি প্রোটোকল সংজ্ঞায়িত করতে পারি, এবং কয়েকটি পদ্ধতি optionচ্ছিক হিসাবে সেট করতে পারি?

উত্তর:


248

" ফর্মাল প্রোটোকলস " এর অ্যাপল পৃষ্ঠা থেকে :

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

@protocol MyProtocol

- (void)requiredMethod;

@optional
- (void)anOptionalMethod;
- (void)anotherOptionalMethod;

@required
- (void)anotherRequiredMethod;

@end

4
দ্রষ্টব্য: '' '@ @tional' '' এবং '' '@ જરૂરી' '' নির্দেশনা এটি অনুসরণ করে যে কোনও পদ্ধতিতে প্রযোজ্য।
ওয়েইন

31

যদি কোনও প্রোটোকলে থাকা কোনও পদ্ধতিটি alচ্ছিক হিসাবে চিহ্নিত করা হয় তবে আপনাকে অবশ্যই পরীক্ষা করার আগে কোনও বস্তু সেই পদ্ধতিটি প্রয়োগ করে কিনা তা পরীক্ষা করে দেখতে হবে।

উদাহরণস্বরূপ, পাই চার্ট ভিউটি এইভাবে বিভাগের শিরোনাম পদ্ধতির জন্য পরীক্ষা করতে পারে:

NSString *thisSegmentTitle;
if ([self.dataSource respondsToSelector:@selector(titleForSegmentAtIndex:)]) {
    thisSegmentTitle = [self.dataSource titleForSegmentAtIndex:index];
}

প্রতিক্রিয়াশক্তি নির্বাচন: পদ্ধতিতে একটি নির্বাচক ব্যবহার করা হয়, যা সংকলনের পরে কোনও পদ্ধতির জন্য সনাক্তকারীকে বোঝায়। আপনি @ নির্বাচক () নির্দেশিকা ব্যবহার করে এবং পদ্ধতির নাম উল্লেখ করে সঠিক সনাক্তকারী সরবরাহ করতে পারেন।

এই উদাহরণে ডেটা উত্স যদি পদ্ধতিটি প্রয়োগ করে তবে শিরোনামটি ব্যবহৃত হয়; অন্যথায়, শিরোনাম শূন্য থাকে।


7
প্রতিক্রিয়াগুলি ব্যবহারের জন্য আপনার প্রোটোকলে এনএসবজেক্টটি প্রসারিত করার বিষয়টি নিশ্চিত করুন- টোসলেক্টর
ফ্রেডড্রয়েড

1
ঠিক আছে, যেমন@protocol MyProtocol <NSObject>
লরেন্স কেষ্টলুট

এটি একটি নিখুঁত উত্তর!
186

14

প্রোটোকল নিয়ম সেট করা হয়। নীচের উদাহরণ হিসাবে আমরা প্রোটোকল তৈরি করতে পারি:

TestProtocols.h

@protocol TestProtocols <NSObject>
    @optional
    -(void)testMethodOptional;

    @required  // by default
    -(void)testMethodRequired;
@end

বাস্তবায়ন:

TestClass.h

#import "TestProtocols.h"
@interface TestClass : NSObject  <TestProtocols>

@end

TestClass.m

#import "TestClass.h"
@implemenation TestClass
    //optional to implement 
    -(void)testMethodOptional{
     // Your Code
    }

    //required to implement 
    -(void)testMethodRequired{
     // Your Code
    }
@end

12

ব্যবহার করুন @optionalএটা ঐচ্ছিক করার জন্য আপনার পদ্ধতি ঘোষণা করার আগে শব্দ। সরল!

// myProtocol.h
@protocol myProtocol
- (void)myMandatoryMethod:(id)someArgument;
@optional
- (void)myOptionalMethod:(id)someArgument;
@end
// myClass.m
@interface myClass : someSuperClass <myProtocol>
    //...
@end

6

প্রোটোকলগুলি বিমূর্ত ক্লাসগুলির মতোই কাজ করে, তাই @ অপশনাল কীওয়ার্ড সেই পদ্ধতিগুলি প্রয়োগ করে যা প্রয়োগের জন্য optionচ্ছিক।

সুতরাং, কোডটিতে, কিছু ম্যাথোড 1, কিছু ম্যাথোড 2 এবং কিছুMethod4 প্রয়োজনীয় পদ্ধতি (অবশ্যই প্রয়োগ করা উচিত)। SomeMethod3 alচ্ছিক - যদি আমরা এই পদ্ধতিটি বাস্তবায়ন না করি তবে সংকলকটি কোনও সতর্কতা নিক্ষেপ করবে না।

@protocol myPrtocol<NSObject>

-(void)someMethod1:(id)someArgument;
-(void)someMethod2:(id)someArugument;

@optional

-(void)someMethod3:(id)someArgument;

@required //by default

-(void)someMethod4:(id)someArgument;

@end

// sampleClass.m
@interface sampleClass : someSuperClass <myProtocol>
//...
@end
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.