task(id:priority:_:)
声明
func task<T>(
id value: T,
priority: TaskPriority = .userInitiated,
_ action: @escaping () async -> Void
) -> some View where T : Equatable
返回值
在视图出现之前异步运行指定操作的视图,或使用 id
值更改重新启动任务。
参数
id
观察变化的值。该值必须符合
Equatable
priority
创建异步任务时使用的任务优先级。默认优先级为
userInitiated
action
SwiftUI 在视图出现之前作为异步任务调用的闭包。 SwiftUI 可以在视图消失后在动作完成前自动取消任务。如果
id
值更改,SwiftUI 取消并重新启动任务。
详述
此方法的行为类似于 View/task(priority:_:)
,不同之处在于它还会在指定值更改时取消并重新创建任务。为了检测更改,修改器会测试 id
参数的新值是否等于先前的值。为此,值的类型必须符合
协议。Equatable
例如,如果您定义了一个平等的 Server
类型,该类型在其状态更改时发布自定义通知(例如,从 signed out
到 signed in
),您可以使用任务修饰符将 Text
视图的内容更新为反映当前选择的服务器的状态:
Text(status ?? "Signed Out")
.task(id: server) {
let sequence = NotificationCenter.default.notifications(
named: .didChangeStatus,
object: server)
for try await notification in sequence {
status = notification.userInfo["status"] as? String
}
}
此示例使用
方法无限期地等待由 notifications(named:object:)
实例给出的异步通知序列。AsyncSequence
在其他地方,服务器定义了一个自定义 didUpdateStatus
通知:
extension NSNotification.Name {
static var didUpdateStatus: NSNotification.Name {
NSNotification.Name("didUpdateStatus")
}
}
然后,服务器会在其状态发生变化时发布此类通知,例如在用户登录后:
let notification = Notification(
name: .didUpdateStatus,
object: self,
userInfo: ["status": "Signed In"])
NotificationCenter.default.post(notification)
附加到 Text
视图的任务从通知的用户信息字典中获取并显示状态值。当用户选择不同的服务器时,SwiftUI 取消任务并创建一个新的,然后开始等待来自新服务器的通知。
可用版本
相关用法
- Swift Optional task(priority:_:)用法及代码示例
- Swift Optional tabItem(_:)用法及代码示例
- Swift Optional tag(_:)用法及代码示例
- Swift Optional textSelection(_:)用法及代码示例
- Swift Optional toolbar(id:content:)用法及代码示例
- Swift Optional tint(_:)用法及代码示例
- Swift Optional toolbar(content:)用法及代码示例
- Swift Optional textContentType(_:)用法及代码示例
- Swift Optional touchBarItemPresence(_:)用法及代码示例
- Swift Optional touchBar(_:)用法及代码示例
- Swift Optional touchBar(content:)用法及代码示例
- Swift Optional toggleStyle(_:)用法及代码示例
- Swift Optional transaction(_:)用法及代码示例
- Swift Optional textInputAutocapitalization(_:)用法及代码示例
- Swift Optional touchBarCustomizationLabel(_:)用法及代码示例
- Swift Optional truncationMode(_:)用法及代码示例
- Swift Optional transformEffect(_:)用法及代码示例
- Swift Optional touchBarItemPrincipal(_:)用法及代码示例
- Swift Optional symbolVariant(_:)用法及代码示例
- Swift Optional popover(isPresented:attachmentAnchor:arrowEdge:content:)用法及代码示例
- Swift Optional mask(alignment:_:)用法及代码示例
- Swift Optional listSectionSeparatorTint(_:edges:)用法及代码示例
- Swift Optional badge(_:)用法及代码示例
- Swift Optional fullScreenCover(isPresented:onDismiss:content:)用法及代码示例
- Swift Optional keyboardType(_:)用法及代码示例
注:本文由纯净天空筛选整理自apple.com大神的英文原创作品 Optional task(id:priority:_:)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。