9

新しい Xcode 4.4 がリリースされ、次のようなリテラルをサポートする必要があります。

@42
@"String"
@23.0L
@{ @"key" : obj }
@[obj1, obj2]

また、最新の iOS 5 (およびそれ以前) を対象とする場合は機能しない@YESandもサポートする必要があります。@NOコンパイル後、次のエラー メッセージが表示されます。

予期しない型名 'BOOL': 予期される式

@(YES)と入力することで修正できることはわかっています@(NO)。しかし、期待どおりに機能しない理由を知りたいです。

4

2 に答える 2

24

その理由は、Appleがここで括弧を忘れたためです。

#define YES             (BOOL)1

これはiOS6SDKで修正されます。

#define YES             ((BOOL)1)

それまでの間、と入力する必要があります@(YES)

于 2012-07-27T10:33:30.443 に答える
9

これは、リテラルに関する情報に役立ちます。

この回答に対するコメント投稿者も次のように指摘しています。

私が警告したい小さなことが1つあります。このため、リテラル bool もサポートされていません。ただし、実装した簡単な修正は、これを共通ヘッダーの 1 つの先頭に追加することでした (iOS プロジェクト内)。

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

@ phix23sの答えは、より重要なようです。あなたはそれを受け入れるべきです。

これはコメントから追加する価値がありました:

これは #import の後に行う必要があることに注意してください。これらの #defines を Prefix.pch に入れる場合は、pch の早い段階で Foundation をインポートする必要があります。

于 2012-07-27T10:30:34.380 に答える