Попытка создать простое приложение MacOS, используя SwiftUI. У меня есть представление, которое содержит средство выбора, привязанное к состоянию var. В качестве проверки работоспособности я добавил текстовые представления (дварфы и тома ... itemName), которые также должны меняться в зависимости от изменений Picker. И они делают, но представление, которое я хочу перерисовать (FileList) не делает.
Я подозреваю, что это как-то связано с тем, как я пытаюсь передать новый FileSystemItem (внутренний класс) в FileList. Например, когда FilePanel выполняет повторную визуализацию, volumeSelection возвращается к 0, и состояние применяется впоследствии. Так что моя проблема в том, что мне, кажется, не хватает фундаментальной концепции о том, как эти данные должны передаваться. Я снова просмотрел информацию WWD C и читал другие статьи, но не вижу ответа.
Требуемое поведение при изменении выбора в средстве выбора должно приводить к отображению нового FileSystemItem в Просмотр списка файлов. Как правильно это сделать? Чтобы сформулировать это более обобщенно, как получить дочернее представление для отображения новых данных при изменении выбора Пикера?
struct FilePanel: View
{
@State var volumeSelection = 0
@State var pathSelection = 0
var volumes = VolumesModel() //should be passed in?
var dwarves = ["Schlumpy","Wheezy","Poxxy","Slimy","Pervy","Drooly"]
var body: some View {
VStack {
Picker(selection: $volumeSelection, label:
Text("Volume")
, content: {
ForEach (0 ..< volumes.count()) {
Text(self.volumes.volumeAtIndex(index: $0).itemName).tag($0)
}
})
FileList(item:volumes.volumeAtIndex(index: volumeSelection)).frame(minWidth: CGFloat(100.0), maxHeight: .infinity)
Text(dwarves[volumeSelection])
Text(volumes.volumeAtIndex(index: volumeSelection).itemName)
}
}
}
struct FileList: View {
@State var item : FileSystemItem
var body: some View {
VStack {
List(item.childItems){fsi in
FileCell(expanded:false, item: fsi)
}
Text(item.itemName)
}
}
}