開発環境
$ xcodebuild -version Xcode 14.1 Build version 14B47b # 14.2でも試した $ xcodebuild -version Xcode 14.2 Build version 14C18
エラーメッセージ
The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
XcodeやPCの再鼓動でも改善しなかった。
コード
struct SampleScreen: View { @ObservedObject var viewModel: SampleScreenViewModel var body: some View { NavigationStack { List(viewModel.viewData.items) { item in NavigationLink(value: item) { SampleScreenListItemView(item: item) .disabled(true) } .disabled(true) } .navigationTitle("title") } } }
エラーメッセージ通りに雑に分割してあげるとビルドが通る。
struct SampleScreen: View { @ObservedObject var viewModel: SampleScreenViewModel var body: some View { NavigationStack { List(viewModel.viewData.items) { item in NavigationLink(value: item) { // メソッドに切り出した listItemView(item: item) } .disabled(true) } .navigationTitle("title") } } func listItemView(item: SampleScreenListItem) -> some View { SampleScreenListItemView(item: item) .disabled(true) } }
そんなに込み入った記述をしていないのでどこが悪いのか気になった。
結果として分かったのは、disabledが1つの場合 or navigationTitleを削除するとビルドが通る。何もわからん。
とはいえ、disableの対象はNavigationLinkにのみ適用させれば良いため、一番最初のdisabledは不要となる。