2017-03-23 6 views
2

私はアプリケーション上でファズテストを実行しているため、特に処理されないランタイムエラーを探しています。アプリケーションはObjCとSwiftの両方で書かれていますが、単体テストはSwiftで書かれています。スウィッチキャッチ実行時例外

私は、迅速な判断基準は任意のランタイム例外をキャッチしないことを理解していますが、これは単なる単体テストです。どのように私はスウィフトでのObj-Cの例外をキャッチするには、ランタイムこれらの例外(など範囲外すなわちインデックス)

+0

Obj-Cの例外や瞬時の例外について話していますか?迅速な例外処理は容易ではありません。 Obj-C例外は、ユーティリティObj-C関数を使用するだけで捕捉できます。 – Sulthan

+0

私はObjCのエラーの大半は、それだけで十分だろうと思っています。 –

答えて

3

をキャッチしない、私は簡単なのObj-Cのクラスを使用しています:スウィフトで

#import "ObjC2Swift.h" 

@implementation ObjC 

+ (id)catchException:(id(^)())tryBlock error:(__autoreleasing NSError **)error { 
    @try { 
     id result = tryBlock(); 
     return result; 
    } 
    @catch (NSException *exception) { 
     if (error) { 
      *error = [[NSError alloc] initWithDomain:exception.name code:0 userInfo:exception.userInfo]; 
     } 
     return nil; 
    } 
} 

@end 

はと呼ばれます

let result = try? ObjC.catchException { ... dangerous code here ... } 

何も返さないブロックには別のバリアントが必要な場合があります。

虐待。 Obj-Cの例外は悪であり、私はこれを使用するライブラリが必要なので、これを使用しています。

+0

素晴らしいアイデア、upvoted。 1)Swiftの例外をcatchException()の戻り値として返します。例外クラス、またはNSExceptionサブクラスのカスタムプロパティを含むreasonのようなプロパティをチェックできます。 NSErrorに変換しないでください。 2)誰かがNSExceptionから派生しない例外をスローした場合のIDの取得。 –

+0

@VaddadiKartick Swift 'try'を使用したい場合、例外を返さず、' NSError'変換が必要です:) Swift 'try'が基づいているObj-Cの' NSError'処理は、エラーがあれば 'nil'(または' false')を返します。 – Sulthan

+0

私はあなたの好みを理解しました。私は戻り値として例外を受け取ることに気をつけず、Objective-Cで利用可能なすべての情報をSwiftに返すようにしたいと言っています。 –

関連する問題