web-dev-qa-db-ja.com

@ YES / @NOとYES / NOの違いは何ですか?

Objective-cでは、@YES/@NOYES/NOの違いは何ですか?それぞれにどのタイプが使用されていますか?

23
cdub

@YES[NSNumber numberWithBool:YES]の短縮形です

@NO[NSNumber numberWithBool:NO]の短縮形です

そして私たちが書くなら

if(@NO)
   some statement;

上記のifステートメントは、上記のステートメントが実行されるため、実行されます。

if([NSNumber numberWithBool:NO] != nil)

nilと等しくないため、trueになり、合格します。

一方、YESNOは単にBOOL'sであり、次のように定義されます-

#define YES             (BOOL)1

#define NO              (BOOL)0

YESNOはそれぞれtruefalse10と同じで、YES&の代わりに10を使用できます。 NOですが、読みやすさに関する限り、YESNOが絶対に優先されます(すべきです)。

39
Sanjay Mohnani

違いは、@を使用することで、NSNumberインスタンス、つまりオブジェクトを作成することです。 YesNoは、オブジェクトではなく、単なるプリミティブブール値です。

@は、文字列@"something"、辞書@{"key": object}、配列:@[object,...]、数値:@0,@1...@345または式@(3*2)にもオブジェクトを作成するための文字通りの一種のショートカットです。

NSNumberのようなオブジェクトがある場合、加算や乗算などの基本的な数学演算(obj-c)を実行できないことを理解することが重要です。最初に、に戻る必要があります。プリミティブ値:-integerValue-boolValue-floatValueなど。

ファンデーションコレクションタイプはオブジェクトでのみ機能するため、おそらくこれを見たことがあるでしょう。したがって、一連のブールをNSArray内に配置する必要がある場合は、それをオブジェクトに変換する必要があります。

16
Andrea
  1. @ YES/@NOはNSNumberのタイプであり、Foundationオブジェクトで何かを行うときに使用されます。たとえば

    NSMutableArray * array = [[NSMutableArray alloc] init];
    [array addObject:@YES];//true
    [array addObject:YES];//Wrong
    
  2. はい/いいえはBOOLsです

4
Leo