以下代碼是我之前在我的應用程序中使用的代碼。Objective-C:如果一個對象屬於一個類,這是否意味着對象不是nil或null?
前:
if ([dic objectForKey:@"text"] isKindOfClass:[NSString class]] && [dic objectForKey:@"text"] != nil && [dic objectForKey:@"text"] != [NSNull Null]) {
NSString *text = [dic objectForKey:@"text"];
}
我已經改變了代碼下面的下面。
後:
if ([dic objectForKey:@"text"] isKindOfClass:[NSString class]]) {
NSString *text = [dic objectForKey:@"text"];
}
我相信結果應該是一樣的,但後者更整潔。爲了安全起見,我在問這個問題,以確保我對這個問題是正確的,而不是忽略任何東西。
我會這樣寫:'id obj = dic [@「text」];如果([objc isKindOfClass:[NSString class]]){etc}'。但是請注意,在對類集羣進行測試時:http://stackoverflow.com/questions/1096772/is-it-safe-to-use-iskindofclass-against-an-nsstring-instance-to-determine-type – Koen
該類集羣警告是有趣的一面,但這裏真的不適用。此外,這個問題的兩個最佳答案嚴重誤解了蘋果的觀點。 Apple只是建議如果你有一些接口規定一個對象是一種類型的接口,那麼你應該遵守該合同,並且你不應該再測試一下,看看它在幕後是否真的是另一個集羣的接口並嘗試利用這一點。在這種情況下,沒有這種合同。 – Rob
順便說一句,您可以使用'dic [@「text」]'。 – Sulthan