Xcode 27以前はビルドできていた箇所だが、Xcode 27にアップデート後は実行エラーが出るようになった。
環境
- Xcode 27.0 Beta
- macOS 27.0 Beta
エラー内容
The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
原因
SwiftUIの1つの式が複雑すぎて、型推論を時間内に終えられないことが原因。
SwiftUIをしていると稀によく出会うエラーだが、Xcode 27にアップデートすることで今まで出ていなかった箇所で発生するようになった。
調査
次のような View で発生。Group を書かないと View の中で switch 文が書けなかった時代。
var body: some View {
HStack(alignment: .top, spacing: 0) {
HogeView(viewModel: hogeViewModel)
Divider()
.background(Color(.white))
Group {
switch contentType {
case .hoge:
HogeView()
case .fuga:
FugaView()
default:
fatalError("正しいタイプを設定してください")
}
}
}
.background(Color(.gray))
}
まずは切り出してみる。
var body: some View {
HStack(alignment: .top, spacing: 0) {
HogeView(viewModel: hogeViewModel)
Divider()
.background(Color(.white))
contentView()
}
.background(Color(.gray))
}
@ViewBuilder
private func contentView() -> some View {
switch hogeType {
case .hoge:
HogeView()
case .fuga:
FugaView()
default:
fatalError("正しいタイプを設定してください")
}
}
これでもエラーは消えず。
AIに聞いてみたら @ViewBuilder と fatalError の組み合わせが怪しいとのこと。次のように修正する。
@ViewBuilder
private func contentView() -> some View {
switch hogeType {
case .hoge:
HogeView()
case .fuga:
FugaView()
default:
EmptyView()
}
}
これでエラーは出なくなった。
原因
@ViewBuilder の分岐内に fatalError() があり、View ではなく Never を返す経路が存在していたため。
おわりに
ほぼはじめてのSwiftUIプロジェクトのコードなので許してクレメンス