Swift 5.0 日本語化計画 : Swift 5.0
致命的なエラーの表示を改善した Xcode 9.1
2017年10月5日   Kuba Mirakek
Swift には、プログラムの期待価を指定できる言語構造があります。実行時にこれらの期待価が満たされない場合、プログラムは終了します。たとえば、配列へのインデックス付け は、インデックスが境界内にあることを暗黙的に表現します。
// Program will terminate if 'index' less than 0 or greater than 'array.count - 1'.
let element = array[index]
失敗時にプログラムを終了させるもう一つの一般的な操作は、optional の強制開封 です。
// Program will terminate if 'self.navigationController' is nil.
let nc = self.navigationController!
もう一つの例は前提条件です。
// Program will terminate if 'index' is less or equal to 0.
precondition(index > 0, "Index must be greater than zero.")
期待価が間違っている場合や、コードにバグがある場合、Swift はプログラムがトラップすることを 保証します。特に開発中には、いくつかの前提条件が満たされていないことが一般的であり、プログラムが終了し、デバッガにそのことが示されます。しかし、Xcode 9.1 (現在ベータ版として入手可能) より前のバージョンでは、デバッガは他の型のクラッシュと同じように、通常は EXC_BAD_INSTRUCTION または EXC_BREAKPOINT (これは低レベルの Mach の例外型) と同じ状況を表示しました。
これは、初心者でも経験豊富な開発者にとっても混乱の原因となっています。Xcode 9.1 では、致命的なエラーの表示が大幅に改善されました。デバッガの下で実行すると、Xcode は、トラップが発生したエディタに 失敗の理由 を表示します。
実行時トラップをトリガする多くのイベントは以下の通り。
- 強制開封した nil
- エラーを生じる強制した try (try!)
- 配列への境界外のインデックス付け
- 前提条件の失敗
- アサーション (断言) の失敗
- fatalError の呼び出し
この改善された経験は、アプリのエントリポイントが Swift で書かれている場合にのみ利用可能です(すなわち、 @UIApplicationMain/@NSApplicationMain 属性を持つアプリデリゲート)。
Xcode 9.1 は developer.apple.com からダウンロードできます (現在はプレリリース版、正式版は今年後半にリリース予定)。
<-Swift 4.0 での Dictionary と Set の改善 >Swift 4.1 リリースの過程->