struct Task<Output> { init(_ perform: (@escaping (Result<Output, Error>) -> Void) -> Void) }
可以看到,Task
接受一个闭包作为参数,该闭包接受一个结果回调作为参数。
在执行异步操作时,可以使用这个回调来通知任务的执行结果。
您可以使用 Task
类型来执行任何异步操作,例如网络请求、文件 I/O 或复杂的计算。
下面是一个简单的例子,显示了如何使用 Task
执行一个网络请求:
struct MyView: View { @State private var result: String? var body: some View { Button("Fetch Data") { Task { completion in let url = URL(string: "https://example.com/data.json")! URLSession.shared.dataTask(with: url) { data, response, error in if let error = error { completion(.failure(error)) } else if let data = data { do { let json = try JSONSerialization.jsonObject(with: data, options: []) completion(.success(json)) } catch { completion(.failure(error)) } } }.resume() } .receive(on: DispatchQueue.main) .sink(receiveCompletion: { _ in }, receiveValue: { self.result = "\($0)" }) } } }