小编Pau*_*lle的帖子

SwiftUI 中的任务取消

我在尝试取消任务时遇到了一种奇怪的行为(或者至少是我不理解的行为)。这是一个最小的示例:我有一个任务休眠 30 秒,然后递增计数器。

但是,如果我在 30 秒过去之前对该任务调用 .cancel(),则计数器会立即递增。

我本以为取消任务不会增加计数器值;有人知道这里发生了什么吗?

谢谢你!

import SwiftUI

struct ContentView: View {
    @State var task: Task<Void, Never>? = nil  // reference to the task
    @State var counter = 0
    
    var body: some View {
        VStack(spacing: 50) {
            
            // display counter value and spawn the Task
            Text("counter is \(self.counter)")
                .onAppear {
                    self.task = Task {
                        try? await Task.sleep(nanoseconds: 30_000_000_000)
                        self.counter += 1
                    }
                }

            // cancel button
            Button("cancel") {
                self.task?.cancel()  // <-- when tapped before 30s, counter value …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui

4
推荐指数
1
解决办法
3343
查看次数

标签 统计

ios ×1

swift ×1

swiftui ×1