在前一个开发人员离开后,我在一个项目中有以下块
NSObject *object = (NSObject *)string;
if([object isEqual:[NSNull null]])
return @"none"
哪里string
是NSString *
从字典返回的。
虽然我知道需要检查 NSNull,但有人可以告诉我为什么要先转换为 NSObject 吗?
在前一个开发人员离开后,我在一个项目中有以下块
NSObject *object = (NSObject *)string;
if([object isEqual:[NSNull null]])
return @"none"
哪里string
是NSString *
从字典返回的。
虽然我知道需要检查 NSNull,但有人可以告诉我为什么要先转换为 NSObject 吗?
强制转换是不必要的,尽管通常最好将对象保留为 an,id
直到您知道它不是 an NSNull
(例如,如果您刚刚将其从集合中拉出)。如果你有一个NSString*
which 可能实际上是NSNull
它可能会令人困惑。也许原作者想明确指出字符串实际上可能是别的东西?
此外,NSNull
它被记录为单例,因此您可以(如果需要)比较使用==
.
实际上,在您的情况下,您无需键入强制转换字符串(如果它是NSString
类的对象)到NSObject
. 无论如何,NSObject
它是 Objective-C 中的一个根类,因此它可以是所有类型的对象。NSString
类也继承自NSObject
. 所以NSObject *object = (NSObject *)string
也有效。
if([string isEqual:[NSNull null]])
return @"none"
也为你工作。
最佳实践将您的对象保持在id泛型类型而不是NSObject
.
正如@mike-weller 所说,最好的方法是:
if(string == [NSNull null]){
return @"none"
}
因为 NSNull 使用单例模式。