2017-09-08 15 views
0

私はガードステートメントを呼び出すときはいつでもメソッド呼び出しを得ることができるように、ガードステートメントをオーバーライドするために何かできるかどうかを知りたいと思っています。例については -ガード・ステートメントをオーバーライドする方法はありますか?

guard let string = testString else { 
    BuggerManager.send(exType: .invalidArgumentException, exMessage: "testString is nil") 
    return 
} 
print(string) 

// it happened very rare 
@IBAction func toErrorDivideHandled() { 
    do { 
     let some = try self.divide(x: 10, y: 0) 
     print(some) 
    } catch let error { 
     BuggerManager.send(exType: .decimalNumberDivideByZeroException, exMessage: error.localizedDescription) 
    } 
} 

OR

我々はグローバルガードタイプのメソッドを作成することができます。はいの場合、どうすればそれを作成できますか?前もって感謝します。私はあなたが私のポイントを得ることを望む。

enum GuardError: Error { 
    // In practice, put arguments on this case 
    // that you use to describe the error 
    case doesntExist 
} 

func guardIt<T>(_ closure:() -> T?) throws -> T { 
    guard let ret = closure() else { throw GuardError.doesntExist } 
    return ret 
} 

は、あなたがそのようにようにこれを使用することができます:

+0

あなたがしようとしていることのいくつかのコード例を表示できますか? – Sweeper

+0

私は、1つのメソッド呼び出しでキューに例外を追加する小さなフレームワークを作成しました。ここまで、例外のメソッドがキューに追加され、いつかそれがサーバーに送信されます。私が今やっていることは、それ以外のすべてのガードの中でメソッドを呼び出すことです。私が欲しいのは、ガードステートメントをオーバーライドして、すべてのガードブロックに同じメソッドを入れていないようにすることです。あなたが私のコメントを理解していただければ幸いですこの質問に興味を持ってくれてありがとう。 –

+0

あなたは何を厳守していますか?これは実際にXY問題のように聞こえる。あなたのガードステートメントのいくつかを示してください。 – Sweeper

答えて

1

あなたはガード文をオーバーライドすることはできませんが、多分それをラップし、スウィフトのエラー処理メカニズムを使用することによって、あなたが何をしたいか近似することができる

let foo = try guardIt { somePossiblyNilThing } 

catchブロックでは、列挙型のケースでパラメータを使用して、適切な情報をBuggerManagerに送信できます。

+0

この質問@Charles Srstkaに興味を表明してくれてありがとうが、私はいくつかのものが欲しい。 –

関連する問題