5

Xcode 4.4 の一部として導入された新しい Objective-C リテラル構文を試していました。

辞書、整数、および配列はすべて正常に機能しますが、s を機能させるのに問題がありましたBOOL。例えば:

NSDictionary *myDict = @{
    @"foo": @"bar",
    @"test": @YES
};

ブール値の行に「予期しない型名 'BOOL': 期待される式」が表示されます。

しかし@(YES)、、、すべて正常に動作します@1@true

この記事: http://clang.llvm.org/docs/ObjectiveCLiterals.htmlは、それが機能することを示唆してい@YESます。

独自の行でも試してみましたNSNumber *myNum = @YES;が、同じエラーが発生します。

バグ?!

4

2 に答える 2

3

これはバグではなく、Apple が現在行っているためです。

#define YES (BOOL)1
#define NO  (BOOL)0

それ以外の

#define YES ((BOOL)1)
#define NO  ((BOOL)0)

これは最新の SDK で修正されています。

于 2012-09-03T15:00:18.353 に答える
1

BOOL リテラルは、iOS または Mac SDK の一部として定義されている新しい言語キーワードに依存しているため、古い SDK (iOS 5.1 を含む) にはそれがないため、ボクシング表記を使用する必要があります@(YES)

上記のコメントで述べたように、これはオブジェクトの添字にも当てはまると思います。

(ソースを使用して自分の質問に答える: http://jamesdempsey.net/2012/07/30/moving-to-new-objective-c-literals/ )

于 2012-09-03T14:56:25.370 に答える