2016-04-07 4 views
1

Swiftで指定された引数が無効であるという関数からエラーを伝播する標準的な方法はありますか?Swiftの引数検証エラーを伝播する最善の方法は何ですか?

自分でErrorTypeを定義できます。しかし、標準的な方法があれば私は重複した作業を避けたいと思っています。

もう1つのオプションは、メイクリターンタイプnullableです。 (私個人的には、試してみるとエラーが発生しますが、同じ効果が得られます)

Swiftではどのように「標準」または「良い」と見なされますか?

+1

まあ、ある意味では、NSErrorを「スロー」することができます。これは、独自のErrorTypeを定義するよりも「標準」です。 – jtbandes

+0

私は参照してください。私はNSErrorに標準コードはないと思っていましたが、今ではいくつかの[コード]が見つかりました(https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Constants/index.html#//apple_ref/doc/constant_group/NSError_Codes)があります。 NSError(カカオドメインとNSValidationErrorMinimumコード)が適しています。 – Satoshi

答えて

0

自分のコードを使用している開発者に何か問題があったことを伝えるために、これを使用しました。アプリケーションを停止するので、正確にしてください。

class AbstractMethodException: NSException { 
    init() { 
     super.init(
      name: "Called an abstract method", 
      reason: "All abstract methods must be overriden by subclasses", 
      userInfo: nil) 
    } 
    //required by Xcode compiler. strange thing 
    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
    } 
} 

また、抽象関数の例外をどのように発生させるかの例があります。

エラーをスローする必要がある場合は、エラータイププロトコルを使用することをおすすめします。

+0

ありがとうございます。 タイトルが紛らわしかったので修正しました。 投稿から、SwiftでNSException.raiseとNSInvalidArgumentExceptionを使用できることがわかりました。 エラータイプに変換されず、前述したようにSIGABRTが発生します。 私の場合、ErrorTypeは、アプリケーションをクラッシュさせるか、キャッチ/オプションの置換によって処理させるオプションがあるので、より良いようです。 – Satoshi

+0

@Satoshiはい。それが抽象関数がどのように機能すべきかです。ただSIGABRTを引き起こします。 –

関連する問題