2012-02-20 15 views
8

मेरा विचार जावा में एक इंटरफ़ेस प्रकार के चर के घोषित करने के समान है।क्या मैं एक उद्देश्य-सी इंटरफ़ेस में 'प्रोटोकॉल' प्रकार का एक चर घोषित कर सकता हूं?

उदाहरण के लिए

तो,

हेडर फाइल 1:

@protocol Calculator 

@end 

मैं तो एक @interface CalculatorImpl जो ऊपर Calculator प्रोटोकॉल लागू करता है परिभाषित करते हैं।

हेडर फाइल 2 में:

@interface SomeViewController : UIViewController { 


} 

@property (weak, nonatomic) IBOutlet UITextField *txtResult; 
@property (weak, nonatomic) Calculator* calculator; 

@end 

हालांकि, xcode इच्छा झंडा कैलकुलेटर लाइन

property with 'weak' attribute must be of object type 

में एक त्रुटि प्रोटोकॉल के इस प्रयोग के उद्देश्य-सी ने उसकी अनुमति नहीं है?

उत्तर

18

@protocol एक प्रकार नहीं है, इसलिए आप इसका उपयोग @property के प्रकार के लिए नहीं कर सकते।

यह क्या आप शायद बजाय क्या करना चाहते है:

@property (weak, nonatomic) id <Calculator> calculator; 

यह अपने प्रकार पर कोई प्रतिबंध के साथ एक संपत्ति की घोषणा को छोड़कर यह Calculator प्रोटोकॉल के अनुरूप है कि।

+0

किसी भी वस्तु को टाइप करने के लिए इसे सेट करके, आप इस प्रकार के स्विफ्ट में बिना किसी प्रतिबंध के किसी संपत्ति को कैसे बनाएंगे? – Chris

4

आप का उपयोग करना चाहिए

@property (weak, nonatomic) id <Calculator> calculator; 

ऑब्जेक्टिव-सी में आप एक प्रोटोकॉल का दृष्टांत नहीं कर सकते हैं, आप केवल यह के अनुरूप किया जा सकता है। इस प्रकार, Calculator टाइप करने की बजाय, आपके पास एक सामान्य वस्तु होनी चाहिए जो Calculator प्रोटोकॉल के अनुरूप है।

नहीं तो आप

@property (weak, nonatomic) CalculatorImpl* calculator; 

उपयोग कर सकते हैं के बाद से CalculatorImpl एक अंतरफलक, नहीं एक प्रोटोकॉल है।

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