2012-07-28 11 views
5

एक्सकोड 4.4 का आधुनिक उद्देश्य सी सिंटेक्स में कनवर्ट करना, मेरी [NSNumber numberWithBool:YES] कॉल @(YES) में परिवर्तित कर दी गई थीं। मुझे कुछ मुद्दा था कि अब मैं भूल गया हूं, और उन्हें खुद को @YES में बदल दिया है, जो सही वाक्यविन्यास माना जाता है।@YES एक "अपेक्षित अभिव्यक्ति" त्रुटि क्यों देता है, लेकिन @ (YES) संकलित करता है?

Unexpected type name 'BOOL': expected expression

मैं जानता हूँ कि एक "अभिव्यक्ति" वाक्य रचना है कि वहाँ है, लेकिन मैं नहीं दिख रहा है यही कारण है कि मैं बस @YES और @NO का उपयोग नहीं कर सकते हैं:

हालांकि, ऐसा करने के लिए मुझे त्रुटि देता है।

// Compiler error: 
NSDictionary *userDefaultsDefaults = @{@"hasBeenLaunched": @YES}; 

// No error 
NSDictionary *userDefaultsDefaults = @{@"hasBeenLaunched": @(YES)}; 

@(YES) क्यों संकलित करता है, जबकि @YES नहीं है, और मैं क्या उपाय करने कि कर सकते हैं?

+0

आप वास्तव में क्या पूछ रहे हैं? –

उत्तर

10

लघु जवाब:

उपयोग @(YES) और @(NO)


लंबे समय तक जवाब:

जो बताते हैं कि यह ज्यादातर एप्पल की ओर से एक निरीक्षण प्रतीत होता है this answer पर एक नज़र डालें।

this answer पर एक टिप्पणीकार भी बताते हैं:

There is one small thing I'd like to warn about. Literal bools are also not supported because of this. However, a quick fix that I implemented was adding this to the beginning of one of my common headers (in an iOS project)

#ifndef __IPHONE_6_0 
#if __has_feature(objc_bool) 
#undef YES 
#undef NO 
#define YES __objc_yes 
#define NO __objc_no 
#endif 
#endif 
+0

मैं देखता हूं। तो मैं पागल नहीं हूँ। सर उठाने के लिए धन्यवाद। मैंने कहा कि मेरे उपसर्ग में और वांछित के रूप में गैर-कोष्ठक वाक्यविन्यास का उपयोग करने में सक्षम था। – akaru

+1

ऐसा लगता है कि यह एक्सकोड 4.5 में तय किया गया है - मूल रूप से उसी कोड का उपयोग करके, [एलएलवीएम डॉक्स] (http://clang.llvm.org/docs/ObjectiveCLiterals.html) द्वारा निर्णय लेना। –

0

नया नंबर शाब्दिक (@YES) की तरह बजना अद्यतन में पूरी तरह से 4.5 तक XCode में लागू नहीं किया जाता है।

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