swiftUI编译器无法键入检查此。。。尝试使用服务器API中的数据时

swiftUI编译器无法键入检查此。。。尝试使用服务器API中的数据时,swift,swiftui,Swift,Swiftui,我发出网络请求并希望解析和显示结果,但它并没有编译并给出结果 The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expression 我有这样的看法: struct SummaryView: View { @EnvironmentObject var state: AppState @State var

我发出网络请求并希望解析和显示结果,但它并没有编译并给出结果

The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expression
我有这样的看法:

struct SummaryView: View {
@EnvironmentObject var state: AppState
@State var responsePriceFromServer: OrderStatusResp? = nil
@State var loading: Bool = true

var body: some View {
    self.state.makeAPICall( success: nil, successData: { data in
        if let d = try! JSONDecoder().decode(OrderStatusResp?.self, from: data) {
            DispatchQueue.main.async {
                responsePriceFromServer = d
                loading = false
            }
            return
        }
    }, failure: { err in
        print("Failed to load client order detail: " + err)
    }
    )
    return ZStack(alignment: .bottom) {
        if !loading {
                VStack(alignment: .leading) {
                    responsePriceFromServer?.order?.amount
                }
        }else {
            ZStack(alignment: .center) {
                Color(rgb: "FEFEFE")
            }

        }
    }

  }
}
而这个反应类:

struct OrderStatusResp: Hashable, Codable {
var order: OrderStatus?
var result: Bool?
var msg: String?
}

struct OrderStatus: Hashable, Codable {
var id: Int?
var status: Int?
var paid: Int?
var amount: Int?
var discountSum: Int?
var items: [OrderStatusItem]
}

struct OrderStatusItem: Hashable, Codable {
var price: Int
var discounted: Int
var total: Int
var name: String
var code: Int
var quantity: Int
}
但是,当我以这种方式显示它时,它工作正常:

                    Text("\(state.responsePriceFromServer?.order?.items ?? [] )")
有什么问题

附言
我从堆栈和文档中搜索了其他类似的答案,但当编译器说它无法在合理的时间内编译某些内容时,没有任何帮助:

答复 在
VStack
中,您不能输入普通字符串,因为普通字符串不是
视图
,而
VStack
只接受
视图
。您必须执行
VStack{Text(someString)}
而不是
VStack{Text(someString)}
,因为
Text
是一个
视图
(例如,符合
视图
协议)

笔记
不要这样对自己!不要像那样在视图主体中调用api,这会导致太多api调用,超出您的需要。而是在
.onAppear()

中执行api调用,此
responsePriceFromServer?.order?.amount
需要展开,然后添加到文本中。不能以这种方式显示值。如果您想显示文本,那么它需要类似于
文本(\(responsePriceFromServer?.order?.amount?0)”)
。进行API调用的方式似乎非常糟糕。。。如果在body属性上调用该属性,则会在每个body渲染上调用API!