Swiftui ForEach方法出现错误`编译器无法在合理时间内对此表达式进行类型检查`
我目前正在使用SwiftUI开发一个应用程序 我有一个错误Swiftui ForEach方法出现错误`编译器无法在合理时间内对此表达式进行类型检查`,swiftui,Swiftui,我目前正在使用SwiftUI开发一个应用程序 我有一个错误编译器无法在合理的时间内对这个表达式进行类型检查;尝试将表达式拆分为不同的子表达式 有一些关于相同错误的文章,我试图解决这个问题,但我不能在我的情况下这样做 有人能告诉我怎么解决这个问题吗 代码如下: 已编辑 import SwiftUI struct InfoView: View { @EnvironmentObject var appState: AppState var body: some View {
编译器无法在合理的时间内对这个表达式进行类型检查;尝试将表达式拆分为不同的子表达式
有一些关于相同错误的文章,我试图解决这个问题,但我不能在我的情况下这样做
有人能告诉我怎么解决这个问题吗
代码如下: 已编辑
import SwiftUI
struct InfoView: View {
@EnvironmentObject var appState: AppState
var body: some View {
Button(action: {
appState.makeGetCallInfo()
}) {
Text("Hit API")
}
ForEach(appState.arrayInfos ?? []){ info in
VStack{
Group{
Text(String(info.id))
Text(String(info.no_1))
Text(String(info.no_2))
Text(info.name_1)
Text(info.name_2 ?? "")
Text(info.name_3)
Text(info.name_4 ?? "")
Text(String(info.no_3 ?? 0))
Text(info.name_5 ?? "")
Text(String(info.no_4 ?? 0))
}
Group{
Text(String(info.no_5 ?? 0))
Text(info.name_6 ?? "")
Text(String(info.no_7))
Text(String(info.no_8))
Text(info.name_7 ?? "")
Text(info.name_8)
Text(info.memo ?? "")
Text(info.created_at)
Text(info.updated_at)
Text(String(info.userId))
}
Divider()
.padding()
}
}
}
}
如果我像下面那样减少VStack中的子视图数量,它会工作得很好。错误消失了
import SwiftUI
struct InfoView: View {
@EnvironmentObject var appState: AppState
var body: some View {
ForEach(appState.arrayInfos ?? []){ info in
VStack{
Group{
Text(String(info.id))
Text(String(info.no_1))
Text(String(info.no_2))
Text(info.name_1)
Text(info.name_2 ?? "")
Text(info.name_3)
Text(info.name_4 ?? "")
Text(String(info.no_3 ?? 0))
Text(info.name_5 ?? "")
Text(String(info.no_4 ?? 0))
}
Divider()
.padding()
}
}
}
}
AppState.swift
import SwiftUI
import Foundation
import Combine
class AppState: ObservableObject {
@Published var arrayInfos:[Infos]?
func makeGetCallInfo() {
// Set up the URL request
let endpoint: String = "https://sample.com/api/info/?user=1"
guard let url = URL(string: endpoint) else {
print("Error: cannot create URL")
return
}
var urlRequest = URLRequest(url: url)
urlRequest.addValue("token xxxxxxxxxxxxxxxxxxx", forHTTPHeaderField: "authorization")
// set up the session
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)
// make the request
let task = session.dataTask(with: urlRequest) {
(data, response, error) in
// check for any errors
guard error == nil else {
print("error calling GET")
print(error!)
return
}
// make sure we got data
guard let responseData = data else {
print("Error: did not receive data")
return
}
// parse the result as JSON, since that's what the API provides
DispatchQueue.main.async {
do{ self.arrayInfos = try JSONDecoder().decode([Infos].self, from: responseData)
}catch{
print("Error: did not decode")
return
}
}
}
task.resume()
}
JsonModel.swift
import Foundation
struct Infos: Codable,Identifiable {
var id: Int
var no_1: Int
var no_2: Int
var name_1: String
var name_2: String?
var name_3: String
var name_4: String?
var no_3: Int?
var name_5: String?
var no_4: Int?
var no_5: Int?
var name_6: String?
var no_7: Int
var no_8: Int
var name_7: String?
var name_8: String
var memo: String?
var created_at: String
var updated_at: String
var userId: Int
}
Xcode:Version12.0.1您的VStack包含的子视图太多,最多允许10个。因此,将它们按较少的数量分组,如下所示
VStack{
Group {
Text(String(info.id))
Text(String(info.no_1))
Text(String(info.no_2))
Text(info.name_1)
Text(info.name_2 ?? "")
Text(info.name_3)
Text(info.name_4 ?? "")
Text(String(info.no_3 ?? 0))
Text(info.name_5 ?? "")
Text(String(info.no_4 ?? 0))
}
Group {
Text(String(info.no_5 ?? 0))
Text(info.name_6 ?? "")
Text(String(info.no_7))
Text(String(info.no_8))
Text(info.name_7 ?? "")
Text(info.name_8)
Text(info.memo ?? "")
Text(info.created_at)
Text(info.updated_at)
Text(String(info.userId))
}
Divider()
.padding()
}
注意:最好将这样大的容器分隔成专用视图,并在此处创建。将其分解为较小的视图。例如,将每个组设为单独的子视图
将info对象从循环传递到子视图中我尝试使用
组{}
进行编辑,但仍有相同的错误。请显示什么是AppState和依赖类型?