2012-07-28 8 views
5

XCode 4.4のConvert to Modern Objective C構文を使用すると、私の[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)


長い答え:

が、これは主にAppleの一部の監督であるように思われていることを説明し this answerを見てください。

this answerにコメント投稿も指摘:クラン更新中(@YES等)

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

これはXcode 4.5で修正されたようです - [LLVM docs](http://clang.llvm.org/docs/ObjectiveCLiterals.html)で判断すると、基本的に同じコードを使用しています。 –

0

新しい数値リテラルが完全に4.5までXCodeの中に実装されていません。

関連する問題