1

我想知道是否有办法实现以下要求:

首先,有一个methodA,它接受一个输入objA并检查objA该方法是否有效。如果有效,则返回一个 object objB。但是,如果objA无效,它只会返回objA自己。请注意,即使objA是有效的,返回的objB可能仍然与 相同objB

然后,在,中有一个methodBand被调用。如果 的输入有效,则程序继续运行而不会出错。但是,如果使用无效输入调用,则应该终止(也就是返回某个指示错误的字符串)以防止将来崩溃。methodmethodAmethodAmethodAmethodB

我能想到的当前解决方案是在其中创建(BOOL)methodAInputIsValid:(obj)input一个methodB

if(methodAInputIsValid:input) {
    obj objReturn = methodA:input;
}else{
    //show error warning
    return;
}
//continue doing something with objReturn and finally return some valid thing

代码的一个问题是,(BOOL)methodAInputIsValid:(obj)input由于methodA:(obj)inputmethodA. 所以我想更有效地使用有效性测试,以便它适用于methodB并删除(BOOL)methodAInputIsValid.

这是我能想到的一种可能的应用:

在程序中,用户被要求输入一个字符串,该字符串将指导程序的操作。但是,输入字符串可能需要标准化,例如将所有字母转换为小写,将所有单引号转换为双引号,并自动补全任何缺少的右括号或引号。但是,如果用户只是输入了无法标准化的废话,那么程序应该终止并警告用户该问题。这两种方法是(BOOL)isStandardizeable:(NSString *)input(NSString *)standardize:(NSString *)input。因为(NSString *)standardize已经返回一个NSString *,我不能让它返回另一个BOOL,对吧?所以下面的代码是无法实现的:

if(standardize:input){
    NSString *result = standardize:input;
} else {
    NSLog(@"unrecognizable input!");
    return;
}
//continue...

谁能想到一种方法来做到这一点?

4

1 回答 1

2

实际上,如果输入无效,我只会methodA返回。nil这是向调用者发出失败信号的一种相当常见的方法。如果您真的需要方法的“身份”部分,只需让调用者做

id res = [... methodA:input];
if(res == nil)
    res = input;
于 2013-03-07T01:55:11.700 回答