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

Sha*_*jon 20 swift swiftui

看来我们现在可以在 iOS 15 中onAppear(action:)task(priority:action:)在 iOS 15 中执行相同的任务。但是,我找不到task(priority:action:)onAppear(action:). 有谁能解释一下吗?

Raj*_*han 28

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

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

任务是异步执行的,允许您在视图显示后立即开始异步工作。

任务的另一个用途是,您可以使用文档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
        }
    }
Run Code Online (Sandbox Code Playgroud)

您可以从这篇文章中阅读更多内容。