iphone - Redeclaring/extending typedef defined in Objective-C protocol in class conforming to protocol -
मेरे पास एक उद्देश्य-सी प्रोटोकॉल है:
टाइपिंगफ़ enum {ViewStateNone} ViewState; @ प्रोटोटोल व्यूस्टेटेबल - (शून्य) initViewState: (व्यूस्टेट) दृश्यस्टेट; - (शून्य) सेटविवेस्टेट: (व्यूस्टेट) व्यूस्टेट; @end
मैं निम्नलिखित वर्ग में इस प्रोटोकॉल का उपयोग कर रहा हूं:
#import "ViewStateable.h" टाइपिंगफ़ाइल enum {ViewStateNone, ViewStateSummary, ViewStateContact, व्यूस्टेट स्थान} व्यूस्टेट; @ इंटरफेस व्यू नियंत्रक: UIViewController & lt; देखेंस्टेटेबल & gt; {} @end
मैं अपने आवेदन की बारीकियों में बहुत दूर नहीं जाऊंगा, लेकिन मैं यहाँ क्या कर रहा हूं typedef
एक गणन में एक प्रोटोकॉल ताकि प्रोटोकॉल के तरीके उस प्रकार का इनपुट मान ले सकें।
तब मैं उस प्रोटोकॉल के अनुरूप वर्गों में टाइप टाइप किए जाने या फिर विस्तारित करने की उम्मीद कर रहा हूं, ताकि प्रत्येक वर्ग के पास अपना हो देखें राज्यों हालांकि, मैं निम्नलिखित दो त्रुटियों में चल रहा हूं:
-
गणक का पुनर्वितरण 'व्यूस्टेट नॉन'
-
विद्रोस्ट के लिए विरोधाभासी प्रकार '
मुझे यह स्वीकार करने में शर्म आ रही है कि सी का मेरा ज्ञान (अर्थात typedef
s) व्यापक नहीं है, इसलिए मैं कोशिश कर रहा हूं
पी> यह संभव नहीं है और न ही समझदार यह इस तथ्य से आता है कि typedefs और enums हैं मूल रूप से बस परिभाषित करता है (ठीक है, वास्तव में नहीं, लेकिन इस उद्देश्य के लिए वे हैं।) यदि आपको इस तरह से काम करने की ज़रूरत है, तो आप अपने डिजाइन की समीक्षा कर सकते हैं (नीचे देखें)।
और जानकारी
टाइप टाइपफ़ाइल प्रकार newtype;
है (लगभग) के बराबर
# नई प्रकार के प्रकार को परिभाषित करें;
और
<पूर्व> enum {ViewStateNone};
मूल रूप से
#define व्यूस्टाइट नॉन 1
के समान है दोनों के बीच मतभेद, और enums और typedefs का उपयोग करने के लिए सबसे सम्मोहक तर्क निश्चित रूप से पूर्णांक स्थिरांक की समय जांच करने के लिए है।
हालांकि; एक बार typedef enum {} प्रकार;
देखा गया है, इसे अनदेखी नहीं किया जा सकता है, और एक बार इसे देखा गया है, इसका नाम इसके लिए आरक्षित है, और यह अकेला है।
इस सब के आसपास के तरीके हैं; लेकिन ये पथ कभी-कभी यात्रा करते हैं, और आमतौर पर अच्छे कारण के लिए। यह जल्दी से अविश्वसनीय रूप से अविश्वसनीय हो जाता है।
समाधान के रूप में, आप एक नया वर्ग, MyViewState
बनाना चाहते हैं, जो दृश्य राज्य और संबंधित जानकारी का प्रतिनिधित्व करता है, जो आसानी से एक हो सकता है आवरण एक NSInteger
।
समापन में: अपनी डिज़ाइन की समीक्षा करें। मुझे डर है कि आप कुछ जटिल तरीके से कर रहे हैं।
Comments
Post a Comment