“无法构造‘任务’,因为它没有可访问的初始值设定项”SwiftUI 问题[重复]

问题描述 投票:0回答:1

如何使用:

enter image description here

struct TestView: View {
    @StateObject private var housesListVM = HousesListViewModel()
    var body: some View {
        Text("Hello, World!")
            .onAppear {
                Task {
                    await housesListVM.fetchAll()
                }
            }
    }
}

功能:

enter image description here

@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 结构来改进它们,但我陷入了困境。

swiftui async-await concurrency task
1个回答
0
投票

您可以使用

.task
进行异步/等待,它旨在替换
@StateObject
,只需执行以下操作:

.task{ // runs on appear 
   items = await fetcher.fetchItems
}

如果您想模拟它以进行预览,请将包含异步函数的 fetcher 结构放入环境中。

© www.soinside.com 2019 - 2024. All rights reserved.