【Swift】ランタイムエラーやコンパイルエラーとは?種類と解決方法
この記事からわかること
- Swiftのエラーに関する仕様
- エラーの種類と違い
- ランタイムエラーとは?
- コンパイルエラーとは?
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
Swiftのエラーについて
Swiftは比較的バグが発生しにくい言語仕様になっています。それはSwiftの発表当時から謳われていたことであり、以下のような特徴を持っているからのようです。
ポイント
- 静的型チェック
- 変数の初期化の強制
- nil値
- 暗黙的型変換なし
- メモリ自動管理(ARC)
- 数値型のオーバーフロー検査
ですがもちろんバグが発生しにくいとはいえ起きないわけでもなく、さまざまなエラーが発生することでバグを未然に防ぎ、開発者たちに知らせてくれるようになっています。
エラーの種類と違い
Swiftで仕様的に発生するエラーは大きく分けて2種類あります。
- コンパイルエラー
- ランタイムエラー
両者の違いと特徴を見ていきます。
コンパイルエラーとは?
そもそもSwiftはコンパイラ型のプログラミング言語ということが重要になります。プログラミング言語にはコンパイラ型とインタプリタ型の2種類に分かれ、コンパイラ型はコードをまとめて読み込み変換(コンパイル)して実行する特徴を持っています。インタプリタ型はその逆でコードを1行ずつ読み込み実行していきます。
Swiftのコンパイルエラーとはまさしくコードをまとめてコンパイルする際に発生するエラーのことです。例えば誤字や構文間違いなど基本的なタイポミスなどで発生することが多いです。
Type Mismatch Error(型の不一致エラー)
関数の引数の型や代入する変数の型が一致していない場合に発生します。例えば、Int型の値をDouble型の変数に代入しようとするとこのエラーが発生します。
Missing Argument Label Error(引数ラベルが欠落しているエラー)
関数の呼び出し時に必要な引数のうち、引数ラベルを指定していない場合に発生します。
Unexpectedly found nil while unwrapping an Optional(オプショナルのアンラップ中にnilが見つかりました)
オプショナル型の変数をアンラップ(!)しようとした際に、nilが代入されていた場合に発生します。
ランタイムエラーとは?
ランタイムエラーはコンパイルは成功後に実行した際に発生するエラーです。例えばアプリをビルドした後に画面遷移したらクラッシュしてしまった場合などはこのランタイムエラーの可能性が高いです。
Array Index Out of Range Error(配列のインデックスが範囲外です)
配列のインデックスが配列の範囲外にある場合に発生します。
Unexpectedly found nil(nilが見つかりました)
オプショナル型の変数がnilであることを想定していなかった場合に発生します。
EXC_BAD_ACCESS(アクセス違反)
ポインタが無効なアドレスを参照している場合に発生します。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。