SwiftUI 3中的.onAppear()和.task()有什么区别?

8yoxcaq7  于 2023-01-12  发布在  Swift
关注(0)|答案(1)|浏览(110)

看起来我们现在可以在iOS15中的.onAppear()或.task中执行相同的任务。但是找不到.task()比.onAppear()的优势。有人能解释一下吗?

5tmbdcev

5tmbdcev1#

task()onAppear()对于在视图出现时运行同步函数是相同的。

主要点差异在于,当此视图消失时,task(id:priority:_:)任务将被取消**。**这意味着当您调用任何Web服务/ API或添加任何其他任务并返回屏幕时,此任务将自动取消。

任务是异步执行的,并允许您在视图显示后立即启动异步工作
任务的另一个用途是,您可以使用task(id:_:),如doc中所述
当值更改导致新任务启动或此视图消失时,正在运行的任务将被取消。
下面的示例显示了如何侦听通知以显示用户何时登录。

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文章中阅读更多信息。

相关问题