看起来我们现在可以在iOS15中的.onAppear()或.task中执行相同的任务。但是找不到.task()比.onAppear()的优势。有人能解释一下吗?
5tmbdcev1#
task()和onAppear()对于在视图出现时运行同步函数是相同的。
task()
onAppear()
主要点差异在于,当此视图消失时,task(id:priority:_:)任务将被取消**。**这意味着当您调用任何Web服务/ API或添加任何其他任务并返回屏幕时,此任务将自动取消。
task(id:priority:_:)
任务是异步执行的,并允许您在视图显示后立即启动异步工作。任务的另一个用途是,您可以使用task(id:_:),如doc中所述当值更改导致新任务启动或此视图消失时,正在运行的任务将被取消。下面的示例显示了如何侦听通知以显示用户何时登录。
task(id:_:)
Text(status ?? "Signed Out") .task(id: server) { let sequence = NotificationCenter.default.notifications( of: .didChangeStatus, on: server) for try await notification in sequence { status = notification.userInfo["status"] as? String } }
您可以从this文章中阅读更多信息。
1条答案
按热度按时间5tmbdcev1#
task()
和onAppear()
对于在视图出现时运行同步函数是相同的。主要点差异在于,当此视图消失时,
task(id:priority:_:)
任务将被取消**。**这意味着当您调用任何Web服务/ API或添加任何其他任务并返回屏幕时,此任务将自动取消。任务是异步执行的,并允许您在视图显示后立即启动异步工作。
任务的另一个用途是,您可以使用
task(id:_:)
,如doc中所述当值更改导致新任务启动或此视图消失时,正在运行的任务将被取消。
下面的示例显示了如何侦听通知以显示用户何时登录。
您可以从this文章中阅读更多信息。