在Xcode Playground中尝试调取URLSession.shared.data方法:
if let url = URL(string: "https://jsonplaceholder.typicode.com/todos/1") {
do {
// 同步请求数据
let (data, response) = try URLSession.shared.data(from: url) // 报错行
...
}
}
发现调取报错,输出内容为:
'async' call in a function that does not support concurrency
经排查问题原因在于:
URLSession.shared.data(from:) 是一个 异步 (async) 方法,在 Swift 中异步方法需要在支持异步的上下文(如 async 函数或 Task 闭包中)调用。因此,调用 URLSession.shared.data(from:) 时,需要将代码包装在一个 async 函数中,或使用 Task。
Task {
if let url = URL(string: "https://jsonplaceholder.typicode.com/todos/1") {
do {
// 同步请求数据
let (data, response) = try URLSession.shared.data(from: url) // 报错行
...
}
}
}
Swift 中,带有 async 标记的函数会在并发环境中运行,以便更高效地处理任务,不会阻塞主线程。因此,await 关键字会在该操作完成后继续执行,但必须在支持异步上下文下调用。