try?の仕組みとか曖昧になってしまったのでメモ。 例外のスロー 例外をスローする関数はthrowsを宣言(書く位置は引数宣言の直後) スローする例外はErrorプロトコルを実装している必要がある enum MyError: Error { case notFound case fail(String) } func fatalError() throws -> String { throw MyError.fail("fatal error.") } 呼び出し元 すべての例外の補足 do { try throws宣言された関数呼び出し } catch { ... }といった構文で例外をキャッチ throws宣言された関数を呼び出すときには、頭にtry、try!、try?のいずれかをつける catch { ... }またはcatch let error { ... }ですべての例外をキャッ