首页 > 解决方案 > 如何将默认值设置为范围当我使用 ForEach 方法时?

问题描述

我目前正在使用 SwiftUI 开发应用程序。

我想知道在使用方法时如何设置默认值countas 。Range<Int>ForEach

因为使用由异步方法创建的数组对象,所以当我使用ForEach方法时,我必须设置一个默认值。

如果我只设置默认值0,我会收到以下错误:

Cannot convert value of type 'Int' to expected argument type 'Range<Int>'

我怎么能设置一个值Range<Int>呢?


以下是代码:

*我想设置0为默认值

内容视图.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

标签: swiftui

解决方案


需要使用 的动态变体ForEach,否则数据出现时不会更新

ForEach(appState.arrayInfos?.indices ?? 0..<0, id: \.self) { index in
     VStack {
         InfoRow(no: index, info: appState.arrayInfos![index])
     }
}

推荐阅读