如何使用:
struct TestView: View {
@StateObject private var housesListVM = HousesListViewModel()
var body: some View {
Text("Hello, World!")
.onAppear {
Task {
await housesListVM.fetchAll()
}
}
}
}
功能:
@MainActor
func fetchAll() async {
self.networking = true
let params: Parameters = ["Page": 1,
"Take": 100,
"NeedTotalCount": false,
"SortBy": "",
"SortAscending": true,
"FirstHomeId": "\(self.selectedFirstHome)"]
let endpoint = HouseEndpoint.paginate(params: params)
do {
let result: PaginationBase<[House]> = try await APIAgentTest.shared.runRequest(endPoint: endpoint)
self.all = result.result ?? []
self.filtered = result.result ?? []
self.listIsFetched = true
} catch let error as ErrorResponse {
print("Error: \(error.errorMessage)")
self.all = []
self.filtered = []
} catch {
print("Unexpected Error: \(error.localizedDescription)")
self.all = []
self.filtered = []
}
self.networking = false
}
要求:
苹果 Swift 版本 6.0.3
目标:arm64-apple-macosx15.0
根据我上面给出的信息,我尝试在任务使用中使用这种方式,但是我得到了一个我不明白的错误。我会提供所要求的一切。
我需要做什么?
我正在将闭包类型网络请求函数转换为 async/await 结构来改进它们,但我陷入了困境。
您可以使用
.task
进行异步/等待,它旨在替换 @StateObject
,只需执行以下操作:
.task{ // runs on appear
items = await fetcher.fetchItems
}
如果您想模拟它以进行预览,请将包含异步函数的 fetcher 结构放入环境中。