当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Swift Optional task(priority:_:)用法及代码示例


实例方法

task(priority:_:)

在此视图出现之前添加要执行的异步任务。

声明

func task(
    priority: TaskPriority = .userInitiated,
    _ action: @escaping () async -> Void
) -> some View

返回值

在视图出现之前异步运行指定操作的视图。

参数

priority

创建异步任务时使用的任务优先级。默认优先级为 userInitiated

action

SwiftUI 在视图出现之前作为异步任务调用的闭包。 SwiftUI 将在视图消失后的某个时间点自动取消任务,然后操作完成。

详述

使用此修饰符来执行一个生命周期与修改后的视图相匹配的异步任务。如果任务在SwiftUI 删除视图或视图更改身份之前未完成,SwiftUI 将取消任务。

在任务中使用await 关键字等待异步调用完成,或等待 AsyncSequence 实例的值。例如,您可以修改 Text 视图以启动从远程资源加载内容的任务:


let url = URL(string: "https://example.com")!
@State private var message = "Loading..."


var body: some View {
    Text(message)
        .task {
            do {
                var receivedLines = [String]()
                for try await line in url.lines {
                    receivedLines.append(line)
                    message = "Received \(receivedLines.count) lines"
                }
            } catch {
                message = "Failed to load"
            }
        }
}

此示例使用 lines 方法将存储在指定 URL 的内容作为异步字符串序列获取。当每个新行到达时,for - await - in 循环的主体将行存储在字符串数组中,并更新文本视图的内容以报告最新的行数。

可用版本

iOS 15.0+, iPadOS 15.0+, macOS 12.0+, Mac Catalyst 15.0+, tvOS 15.0+, watchOS 8.0+

相关用法


注:本文由纯净天空筛选整理自apple.com大神的英文原创作品 Optional task(priority:_:)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。