#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)