MeWrite Docs

Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value

SwiftでOptional値の強制アンラップに失敗した場合のエラー

概要

Unexpectedly found nil while unwrapping an Optional value は、Swiftでnil値を強制アンラップ(!)しようとした場合に発生する致命的なエラーです。アプリがクラッシュします。

エラーメッセージ

Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value

原因

1. 強制アンラップ(!)

1
2
var name: String? = nil
print(name!) // Fatal error

2. 暗黙的アンラップ(!)

1
2
var label: UILabel!
label.text = "Hello" // labelがnilの場合クラッシュ

3. IBOutletの未接続

1
2
3
@IBOutlet weak var button: UIButton!
// Storyboardで接続されていない場合、アクセス時にクラッシュ
button.setTitle("Click", for: .normal)

4. as! による強制キャスト

1
2
let data = ["name": "John"]
let age = data["age"] as! Int // キーが存在しない

解決策

1. if let(Optional Binding)

1
2
3
4
5
6
7
var name: String? = nil

if let unwrappedName = name {
    print(unwrappedName)
} else {
    print("Name is nil")
}

2. guard let(Early Exit)

1
2
3
4
5
6
7
func greet(name: String?) {
    guard let name = name else {
        print("No name provided")
        return
    }
    print("Hello, \(name)")
}

3. nil合体演算子(??)

1
2
3
var name: String? = nil
let displayName = name ?? "Anonymous"
print(displayName) // "Anonymous"

4. Optional Chaining(?)

1
2
var user: User? = nil
let city = user?.address?.city // nilを返す(クラッシュしない)

5. map / flatMap

1
2
3
4
5
let number: Int? = 5
let doubled = number.map { $0 * 2 } // Optional(10)

let nilNumber: Int? = nil
let result = nilNumber.map { $0 * 2 } // nil

6. IBOutletの安全なアクセス

1
2
3
4
5
6
@IBOutlet weak var button: UIButton?

override func viewDidLoad() {
    super.viewDidLoad()
    button?.setTitle("Click", for: .normal)
}

7. 安全なキャスト(as?)

1
2
3
4
5
6
let data = ["name": "John"]
if let age = data["age"] as? Int {
    print(age)
} else {
    print("Age not found or not an Int")
}

8. try? でエラーを無視

1
2
let data = try? JSONDecoder().decode(User.self, from: jsonData)
// エラーの場合はnilを返す

デバッグ方法

1
2
3
4
5
6
7
// printでOptionalの中身を確認
print(optionalValue as Any)

// デバッガで停止
// po optionalValue

// Xcodeのデバッグナビゲータでスタックトレースを確認

関連エラー

関連エラー

Swift の他のエラー

最終更新: 2025-12-17