1

次の要件を達成する方法があるかどうかを知りたいです。

まず、methodA入力を受け取り、メソッドに対して有効objAかどうかを確認する、があります。objA有効な場合は、オブジェクトを返しますobjB。ただし、objAが有効でない場合は、それ自体を返すだけですobjAobjAが有効であっても、返さobjBれるのは。と同じである可能性があることに注意してくださいobjB

次に、があり、methodBmethodmethodAが呼び出されます。の入力methodAが有効な場合、プログラムはエラーなしで続行されます。ただし、methodAが無効な入力で呼び出された場合は、methodB将来のクラッシュを防ぐために終了する必要があります(エラーを通知する特定の文字列で戻る)。

私が考えることができる現在の解決策は、を作成することで(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ます。

これが私が考えることができる1つの可能なアプリケーションです:

プログラムでは、ユーザーはプログラムのアクションを指示する文字列を入力するように求められます。ただし、すべての文字を小文字に変換したり、すべての一重引用符を二重引用符に変換したり、欠落している右括弧や引用符をオートコンプリートしたりするなど、入力文字列を標準化する必要がある場合があります。ただし、ユーザーが標準化できないナンセンスを入力しているだけの場合は、プログラムを終了してユーザーに問題を警告する必要があります。(BOOL)isStandardizeable:(NSString *)input2つの方法はとです(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 に答える