通知(コンポーネントから別コンポーネントに)
たとえば
- List コンポーネント
- Input コンポーネント
のように分かれていた場合に、 input が完了したとき、List 側に Reload を促したい
案外簡単。名前を揃えてあげるだけ。
List 側 (通知を待つ)
swift
var body: some View {
// ..
.task(priority: .background) {
await reloadOnUpdate()
}
}
func reloadOnUpdate() async {
let center = NotificationCenter.default
let name = Notification.Name("Event Added")
for await _ in center.notifications(named: name) {
await MainActor.run {
loadEvents()
}
}
}
Input 側 (通知をする)
swift
func save() {
// なにかの保存処理
// ..
notifyUpdate()
}
func notifyUpdate() {
let center = NotificationCenter.default
let name = Notification.Name("Event Added")
center.post(name: name, object: nil)
}
参考:EventKit の通知
EventKit の更新を受け取りたい場合は EventKit 用の通知がある。 ローカルでした変更は即来る。他端末からのは、しばらくしたら来る
[[EventKit 更新を検知]]