Avatar
@kebo 情報ありがとうございます!↓の部分ですね。 struct ScrumsView: View { @Binding var scrums: [DailyScrum] var body: some View { List { ForEach(scrums) { scrum in NavigationLink(destination: DetailView(scrum: binding(for: scrum))) { CardView(scrum: scrum) } .listRowBackground(scrum.color) } } .navigationTitle("Daily Scrums") .navigationBarItems(trailing: Button(action: {}) { Image(systemName: "plus") }) } private func binding(for scrum: DailyScrum) -> Binding<DailyScrum> { guard let scrumIndex = scrums.firstIndex(where: { $0.id == scrum.id }) else { fatalError("Can't find scrum in array") } return $scrums[scrumIndex] } }
👍 1
9:13 AM
ForEach の O(N) と binding(for:) の O(N) の組み合わせで O(N^2) になるのが辛そうですね。 N が大きい場合。順序を保持して ID から O(1) で子を引けるコンテナがほしいですね。標準であればベストですが、 ArrayDictionary を組み合わせて作るのが良さそう。