Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swiftui 如何将默认值设置为范围<;Int>;当我使用ForEach方法时?_Swiftui - Fatal编程技术网

Swiftui 如何将默认值设置为范围<;Int>;当我使用ForEach方法时?

Swiftui 如何将默认值设置为范围<;Int>;当我使用ForEach方法时?,swiftui,Swiftui,我目前正在使用SwiftUI开发一个应用程序 我想知道当我使用ForEach方法时,如何将count的默认值设置为Range 由于使用异步方法创建的数组对象,因此当我使用ForEach方法时,我必须设置一个默认值 如果我仅将默认值设置为0,则会出现以下错误: Cannot convert value of type 'Int' to expected argument type 'Range<Int>' AppState.swift class AppState: Observab

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

我想知道当我使用
ForEach
方法时,如何将
count
的默认值设置为
Range

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

如果我仅将默认值设置为
0
,则会出现以下错误:

Cannot convert value of type 'Int' to expected argument type 'Range<Int>'
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:Version 12.0.1

您需要使用ForEach的动态变量,否则当数据出现时它将不会被更新

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

ForEach(appState.arrayInfos?.index??0..感谢您的回答,我试图按照您的代码执行此操作。但随后我遇到此错误
Thread 1:致命错误:在这里
appState.arrayInfos![index]中展开可选值时意外发现为零
。闭合范围包括0索引,我的故障-请参阅更新为空范围作为修复(现在使用Xcode 12.1进行测试)
ForEach(appState.arrayInfos?.indices ?? 0..<0, id: \.self) { index in
     VStack {
         InfoRow(no: index, info: appState.arrayInfos![index])
     }
}