我不明白为什么我的DetailView
显示相同的文本。(gif如下)
实际上,我在ContentView
中实现了一个方法selectTheme,它应该在DetailView
出现时根据行的索引更改selectedIndex,但它似乎没有考虑到我的ViewModel
中的var selectedIndex仍然为0。
你知道为什么吗?我真的不明白出了什么问题。
谢谢你。
struct ContentView: View {
var vm:ViewModel
var body: some View {
NavigationView{
List{
ForEach(vm.sentences, id:\.self) { indexNumb in
NavigationLink(destination: DetailView(vm: vm).onAppear(perform: {
vm.selectTheme(sentence: indexNumb)
print(vm.groupedItems)
print("Array :\(vm.sylbArray)")
})) {
Text(String(indexNumb))
}
}
}
}
}
}
struct DetailView: View {
var vm:ViewModel
var body: some View {
ForEach(vm.groupedItems,id:\.self) { subItems in
HStack{
ForEach(subItems,id:\.self) { word in
Button(action: {
print(vm.groupedItems)
print(vm.selectedIndex)
}, label: {
Text(word)
})
}
}
}
}
}
class ViewModel{
@Published var sylbArray: [String] = []
var groupedItems: [[String]] = []
init() {
appendArray(string: String(sentences[selectedIndex]))
groupedItems = [sylbArray]
}
var sentences = [13,4]
func appendArray(string: String) {
sylbArray.append(string)
}
// remains 0 : why ?
var selectedIndex = 0
func selectTheme(sentence: Int) {
if let index = sentences.firstIndex(of: sentence) {
selectedIndex = index
}
}
}
1条答案
按热度按时间czq61nw11#
您的viewModel必须符合类协议“ObservableObject”
下面是您要执行操作的示例。
项目对象:
视图模型类
详细视图: