SwiftUI 如何使用 ProgressView 显示任务的进度?

9 min read

SwiftUI 中的 ProgressView 可以很好地显示任务的进度。下面是一个示例,演示如何使用 ProgressView:

  1. 首先,我们需要定义一个任务,并跟踪其进度。
class Task: ObservableObject {
    @Published var progress: Double = 0.0

    func run() {
        // 在此处运行任务,同时更新进度
        for i in 0..<100 {
            self.progress = Double(i) / 100.0
        }
    }
}

在这个示例中,我们创建了一个名为 Task 的类,并定义了一个 progress 属性,该属性是可观察对象。在 run 方法中,我们运行任务,并在每次迭代时更新进度。

  1. 然后,我们可以创建一个视图,以显示 ProgressView,并将其与任务的进度关联起来。
struct ContentView: View {
    @ObservedObject var task = Task()

    var body: some View {
        VStack {
            ProgressView(value: task.progress)
            Button(action: { self.task.run() }, label: { Text("Start Task") })
        }
    }
}

在这个示例中,我们创建了一个 ContentView 视图,并将其与 Task 对象关联。在视图中,我们添加了一个 ProgressView,其进度值与任务的进度值相关联。我们还添加了一个 Start Task 按钮,以手动启动任务。

  1. 最后,我们可以将 ContentView 视图添加到 SceneDelegate.swift 文件中,以显示它。
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        if let windowScene = scene as? UIWindowScene {
            let window = UIWindow(windowScene: windowScene)
            window.rootViewController = UIHostingController(rootView: ContentView())
            self.window = window
            window.makeKeyAndVisible()
        }
    }
}

在这个示例中,我们只是将 ContentView 视图作为根视图控制器添加到了 UIWindow 中。现在,我们可以编译并运行应用程序,点击按钮查看进度条的效果。