我有一個簡單的問題,關於是否在目標語句 - C.這是否說明正確,還是冗餘?
這是if語句正確,還是它是多餘的,我不需要指定== YES?
NSNumber *boolean = [NSNumber numberWithBool:YES];
if (boolean == YES) ...
感謝
我有一個簡單的問題,關於是否在目標語句 - C.這是否說明正確,還是冗餘?
這是if語句正確,還是它是多餘的,我不需要指定== YES?
NSNumber *boolean = [NSNumber numberWithBool:YES];
if (boolean == YES) ...
感謝
你比較指針和整數,這不會導致你想要的結果。
例子:
NSNumber *boolean1 = [NSNumber numberWithBool:YES];
if (boolean1) {
// true
}
NSNumber *boolean2 = [NSNumber numberWithBool:NO];
if (boolean2) {
// this is also true
}
if ([boolean1 boolValue] && ![boolean2 boolValue]) {
// true
}
不,這是不正確的,它不會產生你認爲它是輸出。 NSNumber * boolean
是一個指向內存中對象的指針,而YES
是一個標量值;他們不應該與==
進行比較。
如果您鍵入此代碼,你還可以得到以下警告:
做正確的方式,它是:
NSNumber *boolean = [NSNumber numberWithBool:YES];
if ([boolean boolValue]) {
// do something
}
但這句話本身並不能使很有道理,因爲你應該比較BOOL
而不是NSNumber
- 在這裏不需要使用NSNumber
。
這是行不通的。 NSBoolean
的一個實例是一個對象,並且不管是YES還是NO都是非NULL。
有兩種好方法可以檢查NSBoolean
的值。
的第一種是使用boolValue
:
NSNumber *boolean = [NSNumber numberWithBool:YES];
if ([boolean boolValue] == YES) ...
if ([boolean boolValue]) ... // simpler
第二種是使用對象的標識返回:
NSNumber *boolean = [NSNumber numberWithBool:YES];
if (boolean == (id)kCFBooleanTrue) ...
後者是快;它依賴於系統上只有一個NSBoolean YES
和NSBoolean NO
。這些值與kCFBooleanTrue
和kCFBooleanFalse
的值相同。我讀過這篇文章是永遠安全的,但我不確定它是否是Apple發佈的文檔的一部分。