我一直在测试Swift 5.5版本中的异步/等待功能,但是我无法从异步函数中收集结果并使用SwiftUI显示它们。以下是我的代码:
import SwiftUI
struct AsyncTestView: View {
@State var text: String?
// Async function
func asyncGetText() async -> String {
Thread.sleep(forTimeInterval: 10)
return "My text"
}
// Stores the result of async function
func fetchText() async {
let text = await asyncGetText()
DispatchQueue.main.async {
self.text = text
}
}
var body: some View {
Text(text ?? "Loading")
.onAppear(perform: fetchText)
}
}
这会导致以下错误:
在不支持并发性的函数中调用 'async' 调用
将 'async' 添加到函数 'fetchText()' 以使其异步
为了使 fetchText()
函数异步化,需添加 async
关键字。但是,这样更改后,.onAppear()
函数将出现以下错误:
无效转换,从类型为 '() async -> ()' 的 'async' 函数转换为同步函数类型 '() -> Void'
在该文章中,作者使用 @asyncHandler
标签来注释 fetchText
函数,但这将导致警告:'@asyncHandler' 已从语言中删除
。