2013-02-01 19 views
14

प्रिंट स्ट्रिंग का प्रतिनिधित्व मैं अपने कुछ एनएसएलॉग एनएसएलओजी की कोशिश कर रहा हूं। उदाहरण के लिए कोड का यह टुकड़ा enum के पूर्णांक प्रतिनिधित्व को मुद्रित करता है, लेकिन मैं चाहता हूं कि यह वास्तविक स्ट्रिंग नाम को आउटपुट करे, इस मामले में मॉन। मैं उसे कैसे कर सकता हूँ?एक enum, NSLog

#import <Foundation/Foundation.h> 
int main(void) 
{ 
    typedef enum { 
     SUN, 
     MON, 
     TUES 
    } DAYS; 

    DAYS d = MON; 
    NSLog(@"%@", d); 
    return 0; 
} 

उत्तर

9

आसानी से नहीं। एनम मान के लिए स्ट्रिंग पहचानकर्ता डेवलपर के लिए है, लेकिन आंतरिक रूप से यह केवल एक विशेष प्रकार के साथ एक मान है (आपके उदाहरण में, DAYS)।

आप एक ऐसा अनुवाद विधि लिख सकता है, enum मान का नाम वापस जाने के लिए, जैसे

- (NSString*)nameForDay:(DAYS)day { 
    switch (day) { 
     case SUN: 
      return @"SUN"; 
     break; 
     case MON: 
      return @"MON"; 
     break; 
     case TUES: 
      return @"TUES"; 
     break; 
     default: 
      return nil; 
     break; 
    }; 

    return nil; 
} 

के रूप में यह पूरी तरह से बदल रहा है enum मूल्यों के प्रति लचीला नहीं है यह, यह करने का एक बुरा तरीका है, लेकिन इसकी एक एक enum मूल्य के साथ एक स्ट्रिंग को जोड़ने का तरीका।

+0

WDUK की तरह कहते हैं, यह वास्तव में वास्तव में समझदार तरीके से नहीं किया जा सकता है। कारण यह है कि संकलक वास्तव में उन enum नामों को मानों के साथ प्रतिस्थापित करता है, इसलिए वे रनटाइम पर भी उपलब्ध नहीं होंगे। WDUK की तरह एक समाधान निश्चित रूप से काम करेगा, लेकिन शायद आप जो चाहते हैं उसे प्राप्त करने के लिए आपको एक अलग मॉडल पर विचार करना चाहिए? –

+1

यदि यह उत्तर आपकी आवश्यकताओं के लिए उपयुक्त था, तो क्या आप इसे स्वीकार कर सकते हैं? धन्यवाद – WDUK

18

एलएलडीबी डीबगर स्ट्रिंग पहचानकर्ता दिखाएगा। तो NSLog का उपयोग करने के बजाय आप एक डीबगर कमांड एक्शन ("पी डी" के साथ ब्रेकपॉइंट का उपयोग कर सकते हैं) और मूल्यांकन के बाद स्वचालित रूप से जारी रखने के लिए ब्रेकपॉइंट सेट कर सकते हैं।

आप ब्लू मार्कर पर राइट-क्लिक करके ब्रेकपॉइंट कॉन्फ़िगर कर सकते हैं।