2012-11-20 17 views
5

यदि मैं नए प्रकार के NS_ENUM मैक्रो के साथ enum प्रकार घोषित करता हूं जिसे मजबूत प्रकार की जांच के कारण पेश किया गया था, तो क्या मैं इस प्रकार को रनटाइम में भी देख सकता हूं?नया आधुनिक उद्देश्य-सी enum प्रकार चेक

मेरा मतलब है, मैं

typedef NS_ENUM(NSUInteger, MyNewType) { 

    MyNewTypeInstance1, 
    MyNewTypeInstance2, 
    MyNewTypeInstance3 

}; 

है। और मैं जानना चाहता हूं कि उदाहरण के लिए (NSUInteger)i = 2MyNewType है।

+0

क्या संकलन समय के बारे में, किसी को भी? – Jonny

उत्तर

7

सं NS_ENUM गणना-सी के लिए "निश्चित अंतर्निहित प्रकार" नामक सी ++ 11 के माध्यम से उद्देश्य-सी के लिए पेश की गई सुविधा का उपयोग करने का एक तरीका है। यह सुनिश्चित करता है कि गणना मूल्यों को संग्रहीत करने के लिए उपयोग किया गया प्रकार निश्चित आकार और हस्ताक्षर का है, लेकिन यह आपको रनटाइम पर गणना किए गए प्रकार के बारे में पूछने की अनुमति नहीं देता है।

यदि आप यह मानने में रुचि रखते हैं कि मूल्य वास्तव में आपके गणित के सदस्य हैं, तो इसके लिए दो संबंधित दृष्टिकोण हैं। यदि मान संगत हैं, तो आप एक मैक्रो लिख सकते हैं जो जांचता है कि प्रश्न में मूल्य वैध संगत सीमा में है या नहीं। अन्यथा, आप ऐप्पल के साथ ले जाने वाले अधिक सामान्य (और वर्बोज़) दृष्टिकोण को ले सकते हैं, उदा। UIDeviceOrientationIsValidInterfaceOrientation, और सभी मान्य गणना मूल्यों के खिलाफ स्पष्ट रूप से जांचें।

+0

इस UIInterfaceOrientationIsValidOrientation दृष्टिकोण के लिए धन्यवाद! – user500

+1

किसी भी हालिया दस्तावेज में 'UIInterfaceOrientationIsValidOrientation' नहीं मिला। – Jonny

+0

@ जॉनी, न ही मैं कर सकता था। यह पता चला कि वह गलत नाम था। ऊपर सुधार किया गया। – warrenm

0

@warrenm: अच्छा ansewr

मैं इस बारे में सोच रहा था:

किस बारे में "myLastValueJustToCheck" का एक प्रकार जोड़ने और देखें कि क्या आपके पूर्णांक है < कि मूल्य?

typedef NS_ENUM(NSUInteger, MyNewType) { 
    MyNewTypeInstance1, 
    MyNewTypeInstance2, 
    MyNewTypeInstance3, 
    myLastValueJustToCheck 
}; 

फिर जांच:

NSUInteger i = 2; 
NSLog(@"is %i i in my range? %i", i, (i<myLastValueJustToCheck)); 

i = 3; 
NSLog(@"is %i i in my range? %i", i, (i<myLastValueJustToCheck)); 

i = 4; 
NSLog(@"is %i i in my range? %i", i, (i<myLastValueJustToCheck)); 
+1

यह दृष्टिकोण ठीक है जब तक कि enum मानों को स्पष्ट रूप से असाइन नहीं किया जाता है, E.G .: 'MyNewTypeInstance3 = 5,'। जब ऐसा होता है तो 'myLastValueJustToCheck' से कम मान आवश्यक रूप से मान्य नहीं होते हैं। –

+1

यह स्विच स्टेटमेंट्स, सत्यापन आदि को गड़बड़ कर देगा। – jrturton

+0

@ बेनेडिक्ट कोहेन: हाँ, ज़ाहिर है कि आप सही हैं। शायद मुझे चेतावनी दी जानी चाहिए – meronix

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