我目前正在使用SwiftUI开发一个应用程序。
我想知道当我使用ForEach
方法时,如何将count
的默认值设置为Range<Int>
。
由于使用了一个由异步方法创建的数组对象,当我使用ForEach
方法时,我必须设置一个默认值。
如果我只设置默认值0
,我会得到以下错误:
Cannot convert value of type 'Int' to expected argument type 'Range<Int>'
那么,我如何将值设置为Range<Int>
呢?
以下是代码:
*我想将0
设置为默认值
ContentView.swift
...
@EnvironmentObject var appState: AppState
ForEach(0..<appState.arrayInfos?.count ?? 0 ,id: .self){ index in
VStack{
InfoRow(no: index,info:appState.arrayInfos![index] )
}
}
...
AppState.swift
class AppState: ObservableObject {
@Published var arrayInfos:[ArrayInfos]?
}
...
let task = session.dataTask(with: urlRequest) {
(data, response, error) in
DispatchQueue.main.async {
do{ self.arrayInfos = try JSONDecoder().decode([ArrayInfos].self, from: responseData)
}catch{
print("Error: did not decode")
return
}
}
}
task.resume()
...
Xcode:版本12.0.1
您需要使用ForEach
的动态变体,否则当数据出现时,它将不会更新
ForEach(appState.arrayInfos?.indices ?? 0..<0, id: .self) { index in
VStack {
InfoRow(no: index, info: appState.arrayInfos![index])
}
}