我做一個iPhone應用程序的檢查 -如何測試Objective-C中的基元是否爲零?
int var;
if (var != nil)
它的工作原理,但在X-代碼這是產生一個警告「指針和整數之間的比較。」我如何解決它?
我來自Java世界,我很確定上述語句在編譯時會失敗。
我做一個iPhone應用程序的檢查 -如何測試Objective-C中的基元是否爲零?
int var;
if (var != nil)
它的工作原理,但在X-代碼這是產生一個警告「指針和整數之間的比較。」我如何解決它?
我來自Java世界,我很確定上述語句在編譯時會失敗。
基元不能nil
。 nil
保留用於指向Objective-C對象的指針。 nil
在技術上是一種指針類型,混合指針和整數將不會進行強制轉換幾乎總會導致編譯器警告,但有一個例外:完全可以將整數0隱式轉換爲沒有強制轉換的指針。
如果你想0和「沒有價值」之間的區別,使用NSNumber
類:
NSNumber *num = [NSNumber numberWithInt:0];
if(num == nil) // compare against nil
; // do one thing
else if([num intValue] == 0) // compare against 0
; // do another thing
if (var) {
...
}
歡迎來到美妙的世界C.任何值不等於整數0或空指針是真的。
但是你有一個bug:整數不能爲空。它們就像在Java中一樣是值類型。
如果你想「盒子」的整數,那麼你要問它的地址:
int can_never_be_null = 42; // int in Java
int *can_be_null = &can_never_be_null; // Integer in Java
*can_be_null = 0; // Integer.set or whatever
can_be_null = 0; // This is setting "the box" to null,
// NOT setting the integer value
一切似乎工作,雖然,哪裏是哪裏,這將讓我的問題的情況下? 僅用於某些背景 - 「var」是域對象中的一個屬性。在我的一個ViewController中,我有一個UISegmentedViewController,用於設置「var。」的值。所以,在用戶選擇任何東西之前,var還沒有被設置。 – bpapa 2009-05-21 22:15:38