2017-01-30 2 views
0

我々は、開発者がこのような何かを我々のコードベースのエリアがたくさんあります。Swiftに例外処理コードを自動的に注入することはできますか?

try { 
    // code 
} catch let error { 
    print("error \(error)") 
} 

コンソールにエラーをログに記録するスーパー役に立たない、そしてまだ人々、より良い何かをする素晴らしいことと思いながら、これを行う。

例外ハンドラにコードを自動的に追加することができればいいと思っています。ビルド時にコードを挿入するのが理想的です。私たちがどんな種類のエラーを投げ捨てているかを知ることは、追跡のためだけにあります。

(このようなことを禁止することが1つの解決策であることはわかっていますが、一般的な例外処理によって、どのような種類の例外が発生しているかを知ることもできます)。

+0

例外を明示的にキャッチすることなく例外をキャッチする方法があるかどうかを基本的に尋ねていますか?その理由は何ですか?キャッチブロックを書く必要はありません。 –

+0

サーバに接続されているのではなく、サーバにエラーログを自動的に送信したいだけです。 –

+0

確かに、私は処理されたエラーとクラッシュのロギングに興味があります。 –

答えて

1

この時点でエラーをログに記録しない場合は、エラーをキャッチしないでバブルアップさせることができます。メソッドthrowsをマークし、これをtryブロックに入れないでください。その後、トップレベルでのみログをとることができます。

代わりに、あなたは機能とブロックをラップすることができます:あなたが好きなら

func trylog(_ f:() throws -> Void) { 
    do { 
     try f() 
    } catch { 
     print(error) 
    } 
} 

次にtrylogにあなたが何か他のものではなく、printを行うことができます。

スイフトtry/catchは実際には「例外」ではありません。これらは、エラーリターンを中心とした特別な構文です。これは、フックするランタイム機構がないことを意味します(returnが呼び出されるたびにフックするのが大変です)。

コンソールでのロギングは、デバイスで簡単にアクセスできないためあまり役に立ちませんが、ほぼすべての場合、「ログするだけで」正確にはcatchブロック。モバイルアプリでもっと便利なことがある場合があります。 Devsは「ただロ​​グする」ことについて罪悪感を感じますが、もしあなたが「正しいことをしている」なら、あなたは正確に何をしますか? printをより機能豊富なロガーに置き換えて、値を取得するか、少なくともprintを自分の関数にラップすることで、後で何かを良くするために交換することをお勧めします。

+0

素早くお返事ありがとうございます!私の目標は自動的にエラーをログに記録し、開発者はそれを心配する必要がないと思う。基本的には、これらのエラーをログに記録し、バッチ処理して、未処理の例外に対してcrashlyticsが行う処理と同様のサーバーに送信するものを追加したいと考えています。 –

+0

私はたぶんどこでもCrashlytics.shared.recordError(エラー)を使用することができます。私はそれが自動的に行うのがクールだと思っていました。 –

+0

そして、実際には、カスタムの 'print'以上のロガーを使用することも同様です。 –

関連する問題