Obj C - 有没有办法让方法返回调用它的方法?

时间:2013-03-07 01:51:43

标签: objective-c algorithm methods

我想知道是否有办法达到以下要求:

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

然后,有一个methodB,在method中,methodA被调用。如果methodA的输入有效,程序将继续运行而不会出错。但是,如果使用无效输入调用methodA,则methodB应该终止(a.k.a返回并发出错误的特定字符串)以防止将来崩溃。

我能想到的当前解决方案是创建(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)inputmethodA:(obj)input共享许多共同的代码,因为methodA中存在有效性测试。因此,我希望更有效地使用有效性测试,以便它适用于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...

有人可以想办法吗?

1 个答案:

答案 0 :(得分:2)

实际上,如果输入无效,我只会methodA返回nil。这是向呼叫者发出故障信号的相当常见的方法。如果你真的需要方法的“身份”部分,那就让呼叫者做

id res = [... methodA:input];
if(res == nil)
    res = input;