我想知道是否有办法达到以下要求:
首先,有一个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)input
和methodA:(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...
有人可以想办法吗?
答案 0 :(得分:2)
实际上,如果输入无效,我只会methodA
返回nil
。这是向呼叫者发出故障信号的相当常见的方法。如果你真的需要方法的“身份”部分,那就让呼叫者做
id res = [... methodA:input];
if(res == nil)
res = input;