返回nil vs零长度字符串

时间:2016-03-19 21:57:14

标签: objective-c

作为Objective-C的新手,我发现自己常常在一个返回NSString的方法应该返回一个空字符串,还是返回一个nil之间徘徊,我不知道确定标准做法是什么,但在Objective-C中出现的大部分语言都是围绕正确处理nils而构建的。

例如,我有一个返回guid的NSManagedObject类别方法(如果托管对象有一个guid字段)。

-(NSString*)guidValue {
    if ([self respondsToSelector:@selector(guid)]) {
        return [self guid];
    }
    return nil;
}

因此,在我的最终回复声明中,我应该执行Objective-C标准和return nil;还是只是一个任意的主观决定,return @"";从标准的角度来看同样有效。

3 个答案:

答案 0 :(得分:2)

nil是更好的选择,因为它表明没有价值。空字符串可以是有效的返回值(可能不是在这种特定情况下,但在其他情况下)。

这实际上取决于您是否需要区分无值(nil)和实际值(空字符串)。

通过返回nil来表示"没有值",调用代码可以做出适当的决定:

NSString *guid = [someObject guidValue];
if (guid) {
    // use the guid as needed
} else {
    // uh-oh - no guid - do something else as needed
}

答案 1 :(得分:1)

答案实际上取决于您如何设计应用程序,以及如何使用此方法。

作为一般规则,nil比空字符串更符合逻辑。

例如,假设您正在验证guid,如:

if ([managedObject guid]) {
    NSLog(@"success");
}

基于nil的设计可以更好地工作。

答案 2 :(得分:1)

答案取决于意图。空字符串与nil不同,因为nil表示根本没有字符串。

尽管在Objective-C中内置了对nil的处理,但您可以使用nil作为字段或属性的额外状态,指示"未知值"。