Как установить значение по умолчанию как Range при использовании метода ForEach?

#swiftui

#swiftui

Вопрос:

В настоящее время я разрабатываю приложение с использованием SwiftUI.

Я хочу знать, как установить значение по умолчанию count as Range<Int> при использовании ForEach метода.

из-за использования объекта массива, созданного асинхронным методом, при использовании 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

Ответ №1:

Вам нужно использовать динамический вариант ForEach , иначе он не будет обновляться при появлении данных

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

Комментарии:

1. Спасибо за ваш ответ, я пытался сделать это, следуя вашему коду. Но затем я получаю эту ошибку Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value здесь appState.arrayInfos![index] .

2. Закрытый диапазон включает индекс 0, моя ошибка — см. Обновлено с пустым диапазоном в качестве исправления (теперь протестировано с Xcode 12.1)