2009-05-21 60 views
11

我做一個iPhone應用程序的檢查 -如何測試Objective-C中的基元是否爲零?

int var; 
if (var != nil) 

它的工作原理,但在X-代碼這是產生一個警告「指針和整數之間的比較。」我如何解決它?

我來自Java世界,我很確定上述語句在編譯時會失敗。

回答

33

基元不能nilnil保留用於指向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 
10
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 
+0

一切似乎工作,雖然,哪裏是哪裏,這將讓我的問題的情況下? 僅用於某些背景 - 「var」是域對象中的一個屬性。在我的一個ViewController中,我有一個UISegmentedViewController,用於設置「var。」的值。所以,在用戶選擇任何東西之前,var還沒有被設置。 – bpapa 2009-05-21 22:15:38

相關問題