我在上一个开发人员离开之后被移动到的项目中有以下块
NSObject *object = (NSObject *)string;
if([object isEqual:[NSNull null]])
return @"none"
string
是从字典返回的NSString *
。
虽然我认为需要检查NSNull,但是有人能告诉我为什么要先向NSObject投射吗?
答案 0 :(得分:3)
投射是不必要的,尽管通常最好将对象保持为id
,直到您知道它不是NSNull
(例如,如果您只是将其从集合中拉出来)。如果您的NSString*
可能实际上是NSNull
,则可能会造成混淆。也许原作者想说清楚字符串实际上可能是别的什么?
此外,NSNull
被记录为单身,因此您可以(如果需要)使用==
进行比较。
答案 1 :(得分:0)
实际上,在您的情况下,您无需键入强制转换字符串(如果它是NSString
类的对象)到NSObject
。无论如何,NSObject
是Objective-C中的根类,因此它可以是所有类型的对象。 NSString
类也继承自NSObject
。所以NSObject *object = (NSObject *)string
也有效。
if([string isEqual:[NSNull null]])
return @"none"
也适合你。
最佳做法是将对象设置为 id 泛型类型,而不是NSObject
。
答案 2 :(得分:0)
正如@ mike-weller所说,最好的方法是:
if(string == [NSNull null]){
return @"none"
}
'因为NSNull使用Singleton模式。