Objective-cでは、@YES
/@NO
とYES
/NO
の違いは何ですか?それぞれにどのタイプが使用されていますか?
@YES
は[NSNumber numberWithBool:YES]
の短縮形です
&
@NO
は[NSNumber numberWithBool:NO]
の短縮形です
そして私たちが書くなら
if(@NO)
some statement;
上記のifステートメントは、上記のステートメントが実行されるため、実行されます。
if([NSNumber numberWithBool:NO] != nil)
nil
と等しくないため、true
になり、合格します。
一方、YES
とNO
は単にBOOL's
であり、次のように定義されます-
#define YES (BOOL)1
#define NO (BOOL)0
YES
&NO
はそれぞれtrue
&false
、1
&0
と同じで、YES
&の代わりに1
&0
を使用できます。 NO
ですが、読みやすさに関する限り、YES
&NO
が絶対に優先されます(すべきです)。
違いは、@
を使用することで、NSNumber
インスタンス、つまりオブジェクトを作成することです。 Yes
とNo
は、オブジェクトではなく、単なるプリミティブブール値です。
@
は、文字列@"something"
、辞書@{"key": object}
、配列:@[object,...]
、数値:@0,@1...@345
または式@(3*2)
にもオブジェクトを作成するための文字通りの一種のショートカットです。
NSNumber
のようなオブジェクトがある場合、加算や乗算などの基本的な数学演算(obj-c)を実行できないことを理解することが重要です。最初に、に戻る必要があります。プリミティブ値:-integerValue、-boolValue、-floatValueなど。
ファンデーションコレクションタイプはオブジェクトでのみ機能するため、おそらくこれを見たことがあるでしょう。したがって、一連のブールをNSArray
内に配置する必要がある場合は、それをオブジェクトに変換する必要があります。
@ YES/@NOはNSNumber
のタイプであり、Foundationオブジェクトで何かを行うときに使用されます。たとえば
NSMutableArray * array = [[NSMutableArray alloc] init];
[array addObject:@YES];//true
[array addObject:YES];//Wrong
はい/いいえはBOOLs
です