9

Swift 2.0 では、従来の ObjC (NSError を返す) および Swift 1.X (成功/失敗オプション) の実行時エラー処理の規則から、Java/C#/C++/etc などの言語での例外処理に非常によく似たものに変更されたようです。 .

デフォルトの ObjC コンパイラ設定では、スタックの巻き戻しがメモリ リークを引き起こす可能性があるため、 Apple は伝統的にスローの代わりに(プログラマ エラーに対して)の使用を強調してきました。NSErrorNSException for runtime errorsNSException

しかし今、彼らは従来の例外と非常によく似たものを考案しました。私の質問は:

Swift 2.0 のエラー処理と従来の例外処理の間に、命名法(エラーと例外) と構文(try-catch の代わりに do-catch、メソッド呼び出しの前に使用される try など)以外に実際の違いはありますか?

4

1 に答える 1

11

私が見つけた3つの大きな違いがあります:

  1. 関数がスローする可能性のあるすべてのエラーをリストする必要はありません。必要なのはthrowsキーワードだけです。

  2. これらのエラーを使用しても速度が大幅に低下することはありませんが、Java やその他の言語ではExceptionオブジェクトを構築してスタックをアンワインドする必要があります。Swift では、throwsキーワードはオブジェクトを返す関数と見なすことができますEither。1 つは元の戻り値の型で、もう 1 つはErrorType値です。

  3. Swift では、すべてのエラーを処理するか、スローするように宣言する必要があります。エラーをスローしていると宣言していないメソッドからエラーを取得することは不可能です。(Java 用語では、すべてのエラーは「チェック済み例外」です)

于 2015-06-09T21:50:40.743 に答える