5

为这样的新手问题道歉。

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

我编写了条件语句,仅在满足某些条件时才允许返回子字符串。但是,如果无法提取子字符串,我不确定我需要返回什么。目前我有返回默认“错误”字符串的方法,但我觉得这可能不是最佳实践。

这是我的方法:

+(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

             }

如何使这种方法对错误更友好?

4

2 回答 2

6

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

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

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

有关 Objective-C 中错误处理的更多一般信息,请参阅使用 Objective-C 编程:处理错误错误处理编程指南

于 2014-01-27T20:16:49.043 回答