5

XCode 4.4 の Convert to Modern Objective C Syntax を使用すると、私の[NSNumber numberWithBool:YES]呼び出しは に変換されました@(YES)。私は今忘れてしまったいくつかの問題を抱えており、それらを自分で に変更しました@YES。これは正しい構文であるはずです。

ただし、そうするとエラーが発生します。

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

@YES「式」構文があることは知っていますが、単にand を使用できない理由がわかりません@NO

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

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

@(YES)コンパイルしないのにコンパイルするのはなぜ@YESですか?それを修正するにはどうすればよいですか?

4

2 に答える 2

10

簡潔な答え:

使用@(YES)して@(NO)


より長い答え:

これは主にApple側の見落としであるように見えることを説明するこの回答を見てください。

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

私が警告したい小さなことが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
于 2012-07-28T00:30:30.073 に答える
0

Clang アップデートの新しい数値リテラル (@YES など) は、4.5 まで XCode に完全に実装されていません。

于 2012-09-20T20:19:21.910 に答える