0

在前一个开发人员离开后,我在一个项目中有以下块

NSObject *object = (NSObject *)string;
if([object isEqual:[NSNull null]])
    return @"none"

哪里stringNSString *从字典返回的。

虽然我知道需要检查 NSNull,但有人可以告诉我为什么要先转换为 NSObject 吗?

4

3 回答 3

3

强制转换是不必要的,尽管通常最好将对象保留为 an,id直到您知道它不是 an NSNull(例如,如果您刚刚将其从集合中拉出)。如果你有一个NSString*which 可能实际上是NSNull它可能会令人困惑。也许原作者想明确指出字符串实际上可能是别的东西?

此外,NSNull它被记录为单例,因此您可以(如果需要)比较使用==.

于 2013-07-24T08:48:21.140 回答
0

实际上,在您的情况下,您无需键入强制转换字符串(如果它是NSString类的对象)到NSObject. 无论如何,NSObject它是 Objective-C 中的一个根类,因此它可以是所有类型的对象。NSString类也继承自NSObject. 所以NSObject *object = (NSObject *)string也有效。

if([string isEqual:[NSNull null]])
    return @"none"

也为你工作。

最佳实践将您的对象保持在id泛型类型而不是NSObject.

于 2013-07-24T08:52:11.513 回答
0

正如@mike-weller 所说,最好的方法是:

 if(string == [NSNull null]){
     return @"none"
 }

因为 NSNull 使用单例模式。

于 2017-06-14T11:34:28.280 回答