我正在尝试将 async/await 与 Swift 5.5 一起使用。我有我的异步函数,但每当我尝试调用它时,我都会收到此错误:
'async' call in a function that does not support concurrency
这是代码示例:
class TryThis {
func getSomethingLater(_ number: Double) async -> String {
// test - sleep for 3 seconds, then return
Thread.sleep(forTimeInterval: 3)
return String(format: ">>>%8.2f<<<", number)
}
}
let tryThis = TryThis()
let result = await tryThis.getSomethingLater(3.141592653589793238462)
print("result: \(result)")
这个有什么解决办法??
最佳答案
这里的答案是“await getSomethingLater”必须从异步上下文中调用。从字面上看,这意味着改变这一点:
let result = await tryThis.getSomethingLater(3.141592653589793238462)
print("result: \(result)")
进入这个:Task {
let result = await tryThis.getSomethingLater(3.141592653589793238462)
print("result: \(result)")
}
所以整个事情变成了:class TryThis {
func getSomethingLater(_ number: Double) async -> String {
// test - sleep for 3 seconds, then return
Thread.sleep(forTimeInterval: 3)
return String(format: ">>>%8.2f<<<", number)
}
}
let tryThis = TryThis()
Task {
let result = await tryThis.getSomethingLater(3.141592653589793238462)
print("result: \(result)")
}
这是输出:result: >>> 3.14<<<
Meet async/await in Swift 中有大量信息来自 WWDC21 的视频。
关于ios - 在不支持并发的函数中调用'async' swift ios Xcode async/await,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67925525/