所以我知道这看起来非常基本,但似乎并没有因某些原因而起作用。我有以下代码。
Target *t = self.skill.target;
if (![t isEqual:nil]) {
NSLog(@"Not nil");
}
我试过这个并且它每次出现都不是nil,除非t
实际上应该为零时才是好的。我甚至尝试将变体放入代码中,因为某些原因,我的t仍然是nil。难道我做错了什么? :\
Target *t = self.skill.target;
t = nil;
if (![t isEqual:nil]) {
NSLog(@"Not nil");
}
答案 0 :(得分:10)
只需检查对象本身就可以正常进行。 NSHipster for NSNull还有一个很好的解释。
if( myObject ){
// do something if object isn't nil
} else {
// initialize object and do something
}
否则只需使用
if( myObject == nil ){
}
答案 1 :(得分:0)
if
操作检查nillable,因此这应该有效:
Target *t = self.skill.target;
if (t) {
NSLog(@"Not nil");
}else{
NSLog(@"nil");
}
希望它有所帮助。
答案 2 :(得分:0)
Target *t = self.skill.target;
t = nil;
if (t) {
NSLog(@"t is Not nil");
}
if (!t) {
NSLog(@"t is nil");
}
答案 3 :(得分:0)
正如this回答所说:
对nil的任何消息都将返回一个结果,该结果相当于所请求类型的0。由于布尔值为0,因此为结果。
因此,nil
对象很特殊。你无法使用isEqual
方法进行比较。你应该比较它而不发送消息,如下:
if (t)
{
}
或简单地说:
if (t != nil)
{
}