推荐答案
// www.javascriptcn.com code example
func fetchData() async throws -> Data {
let url = URL(string: "https://example.com/data")!
let (data, _) = try await URLSession.shared.data(from: url)
return data
}
Task {
do {
let data = try await fetchData()
print("Data fetched: \(data)")
} catch {
print("Failed to fetch data: \(error)")
}
}本题详细解读
1. async 关键字
async 关键字用于标记一个函数或方法为异步函数。异步函数可以在执行过程中暂停,等待异步操作完成后再继续执行。异步函数通常用于执行耗时操作,如网络请求、文件读写等。
2. await 关键字
await 关键字用于在异步函数中等待一个异步操作的结果。当遇到 await 时,当前函数会暂停执行,直到异步操作完成并返回结果。await 只能在 async 函数中使用。
3. Task 结构体
Task 是 Swift 中用于管理并发任务的结构体。通过 Task,可以在非异步上下文中启动一个异步任务。Task 提供了多种初始化方法,允许你以不同的方式执行异步代码。
4. 错误处理
在异步函数中,错误处理与同步函数类似。可以使用 do-catch 语句来捕获和处理异步操作中可能抛出的错误。在上面的示例中,fetchData 函数标记为 throws,表示它可能会抛出错误。在调用时,使用 try await 来捕获可能的错误。
5. 示例代码解析
fetchData函数是一个异步函数,它使用URLSession发起一个网络请求,并返回获取到的数据。Task用于在非异步上下文中启动fetchData函数的执行。- 在
Task中,使用do-catch语句来处理可能的错误,并在成功获取数据后打印结果。
通过这种方式,Swift 的 async/await 语法使得异步代码的编写和理解变得更加直观和简洁。