Skip to main content

SwiftUI で、値を更新したはずが、反映されない

このような Section ありの List を作った際、変更が反映されない。
( 削除は反映されるが、値の変更が反映されない )
( あれ、イベント更新の通知を受け取る必要がある? それとも sleep 入れる必要ある? と思ったが関係なかった )

→ List 内の要素の id が同じだと、更新されない(キャッシュされたように見える)
→ List の各行を unique にすれば良いのかと思いきや、このケースでは Section の ID を unique にしたら解決した

swift
List {
ForEach(filteredEventsByMonth.keys.sorted(by: { $0 < $1 }), id: \.self) { k in

Section {
ForEach(filteredEventsByMonth[k] ?? [], id: \.eventIdentifier) { ev in
EventSummaryView(event: ev)
// .id(ev.eventIdentifier) // ← ★ これはイベントを編集しても変わらない
// .id(ev.eventIdentifier + "-" + modifiedDateStr) // ← ★ ここを unique にしても問題解消されなかった
}
} header: {
Text(k)
}
.id(appData.calendarModifiedTrigger.uuidString + "-" + k) // ← ★ こっちを unique にしたら更新された
}
}

→ これだと全行更新されてしまうはず
→ パフォーマンス気にするなら、子要素の最新の更新日時などを入れるのが良いかもしれないが、今のところ困ってないので、いったん、そのままにしとこう