2015-10-28 75 views
1

在這兩種情況下,NSString都不是NIL。在第一種情況下,它已經失敗了。有誰能給我解釋一下嗎?爲什麼這些輸出不同,而我嘗試在Objective C中執行isKindOfClass?

NSString *str1 = @"str"; 
if (![str1 isKindOfClass:Nil]) { 
    NSLog(@"true"); 
} 
NSString *str2 = [NSString stringWithFormat:@"str"]; 
if (![str2 isKindOfClass:Nil]) { 
    NSLog(@"true"); 
} 
+0

無不是一類 – kirander

+0

[Rü嘗試檢查一個零字符串? –

+0

在這兩種情況下它都會返回true,而我正在運行代碼 – iEinstein

回答

4

爲什麼這些輸出有什麼不同?

Nil不是您可以與isKindOfClass:一起使用的類對象。由於文件沒有說明什麼傳遞Nil它只是未定義。在我的實驗中,我總是得到YES,但結果可能只是隨機的。

如果你想檢查一個變量是零隻使用純舊的C平等:

NSString *str1 = @"str"; 
if (str1 != nil) {   // explicit 
    NSLog(@"true"); 
} 
NSString *str2 = [NSString stringWithFormat:@"str"]; 
if (str2) {     // or just like this 
    NSLog(@"true"); 
} 
0

isKindOfClass

返回一個布爾值,指示接收器是否是給定類的 實例或從該 類繼承的任何類的一個實例。

如果你想查詢字符串是否是零或沒有,你可以簡單地這樣做:

if(str1){ 
     NSLog(@"string is not nil"); 
    } 
+0

好的。但是,如果str2它有一個日誌。我得到的那個str1不是零。但它如何失敗 – Gowtham

+0

我檢查了你的代碼。兩個條件都被執行。他們都沒有失敗 –

相關問題