2011-11-03 17 views
6

मैंकक्षा कार्यान्वयन में दो प्रोटोकॉल के समान विधि नाम को मैं कैसे अलग कर सकता हूं?

@interface TestProtocolImplementation : NSObject <P1,P2> 
{ 

} 

@end 

कैसे मैं "printCommon" के लिए विधि कार्यान्वयन लिख सकते हैं अब दो प्रोटोकॉल

@protocol P1 

-(void) printP1; 

-(void) printCommon; 

@end 


@protocol P2 

-(void) printP2; 

-(void) printCommon; 
@end 

है, मैं एक वर्ग में इन दो प्रोटोकॉल को लागू कर रहा हूँ। जब मैं कार्यान्वयन करने की कोशिश करता हूं तो मैंने समय त्रुटि संकलित की है।

"printCommon" के लिए विधि कार्यान्वयन लिखने की कोई संभावना है।

+0

क्या आप अपनी त्रुटि और अपना कार्यान्वयन पोस्ट कर सकते हैं? – jbat100

+0

#pragma मार्क - #pragma मार्क पी 1 प्रोटोकॉल विधियां - (शून्य) printP1 { \t एनएसएलओजी (@ "प्रिंट पी 1"); } - (शून्य) प्रिंटकॉमन { \t एनएसएलओजी (@ "प्रिंट पी 1"); } #pragma मार्क - #pragma निशान P2 प्रोटोकॉल तरीकों - (शून्य) printP2 { \t NSLog (@ "प्रिंट p2"); } - (शून्य) प्रिंटकॉमन { \t एनएसएलओजी (@ "प्रिंट पी 2"); \t } त्रुटि: की परिभाषा '- [TestObjectLifeCycle printCommon]' यह अच्छा काम कर रहा है जब मैं "printCommon" विधि कार्यान्वयन में से किसी एक को हटा दें। – selva

उत्तर

14

आम समाधान आम प्रोटोकॉल अलग और व्युत्पन्न प्रोटोकॉल आम प्रोटोकॉल लागू है, इसलिए की तरह बनाने के लिए है:

@protocol PrintCommon 

-(void) printCommon; 

@end 

@protocol P1 <PrintCommon> // << a protocol which declares adoption to a protocol 

-(void) printP1; 

// -(void) printCommon; << available via PrintCommon 

@end 


@protocol P2 <PrintCommon> 

-(void) printP2; 

@end 

अब प्रकार जो करने के लिए अपनाने P1 और P2 भी PrintCommon के तरीके अपनाते चाहिए गोद लेने को पूरा करें, और आप सुरक्षित रूप से NSObject<P1>*NSObject<PrintCommon>* पैरामीटर से सुरक्षित रूप से पास कर सकते हैं।

2

मेरे लिए निम्नलिखित कोड काम किया था:

@protocol P1  

- (void) method1; 

@end 

@protocol P2 

- (void) method1; 
- (void) method2; 

@end 

@interface C1 : NSObject<P1, P2> 

@end 

@implementation C1 

- (void) method1 
{ 
    NSLog(@"method1"); 
} 

- (void) method2 
{ 
    NSLog(@"method2"); 
} 

@end 

संकलक उपयोगकर्ता: एप्पल LLVM 3.0 लेकिन अगर आप इस तरह एक समाधान डिज़ाइन करते समय, ऐसी स्थितियों से बचने के लिए प्रयास करें।

संबंधित मुद्दे

 संबंधित मुद्दे