ObjC:错误处理......返回什么

时间:2013-03-24 21:00:59

标签: objective-c error-handling

为这样一个新手问题道歉。

我编写了一个类方法,它接受三个字符串并返回一个子字符串。

我编写的条件语句只允许在满足某些条件时返回子字符串。但是,如果无法提取子字符串,我不确定需要返回什么。目前我有方法返回一个默认的'错误'字符串,但我觉得这可能不是最好的做法。

这是我的方法:

+(NSString *)ExtractSubstringFrom:(NSString *)sourceString 
             Between:(NSString *)firstString And:(NSString *)secondString {


             NSRange stringRangeOne = [sourceString rangeOfString:secondString];
             NSString *resultString;

             if (stringRangeOne.location != NSNotFound) {
             resultString = [sourceString substringToIndex:stringRangeOne.location]; 
             }

             NSRange stringRangeTwo = [sourceString rangeOfString:firstString];

             if (stringRangeTwo.location !=NSNotFound) {
             resultString = [resultString substringFromIndex:stringRangeTwo.location+stringRangeTwo.length];
             return resultString; 
             }

             else return @"Error!";

             //To do... improve error checking

             }

如何使此方法更加错误友好?

2 个答案:

答案 0 :(得分:6)

在Objective C中有几种处理此类错误的方法:

  • 返回默认值 - 通常,默认值为nil。由于在Objective C中允许对nil对象执行操作,因此这是相对安全的。
  • 生成NSError个对象 - 这是最终用户可以解决的更常见的错误,例如连接和配置问题。这种API的不幸副作用是需要设置并传递额外的参数。
  • 使用断言 - 这是处理“编程错误”的好方法,即当程序的参数超出指定范围时。
  • 抛出异常 - 该选项以该语言提供,但Apple强烈反对使用该选项。我在这里提到它是完整的,尽管我自己从不使用这个选项。

答案 1 :(得分:0)

这里的实际最佳做法是不在类方法中执行此操作,而是在将接受该值的事物上实现Key Value Validation,并在设置之前调用验证方法。因此,您将从此方法中删除此验证/变异逻辑,而是将其置于验证方法中,并在控制器中修改值,在设置值之前调用验证方法。这使您的验证逻辑有机会修改该值(即默认值),或者如果输入值无法强制转换为可用的值,则返回错误。

有关Objective-C中错误处理的更多常规信息,请参阅Programming With Objective-C: Dealing with ErrorsError Handling Programming Guide