Skip to main content

通知(コンポーネントから別コンポーネントに)

たとえば

  • 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 更新を検知]]