我是swift和swiftUI的新手,所以可能做错了什么,但我显示了一个切换列表。当其中一个打开时,我希望其他的都关闭,这样一次只能选择一个项目。我有一个切换数组,它工作得很好。但是我无法在不产生编译错误的情况下得到'turn off all the other toggles to work'。
errors
这是所有的代码。
import SwiftUI
struct SheetView: View {
@FetchRequest(sortDescriptors:[SortDescriptor(\Book.timestamp)]) private var items: FetchedResults<Book>
@State var doesClose:[Bool] = []
init(numberOfBooks: Int) {
var values: [Bool] = []
for i in 0..<numberOfBooks {
values.append(false)
}
_doesClose = State(initialValue: values)
print(numberOfBooks)
print(self.doesClose)
}
var body: some View {
NavigationStack{
List {
ForEach(Array(items.enumerated()), id: \.element) { idx, item in
HStack (spacing: 20){
VStack (alignment: .leading, spacing: 5) {
Text(item.bookName!)
Toggle("", isOn: $doesClose[idx])
.onChange(of: doesClose[idx], perform: {for i in 0..<doesClose.count {
if(i != idx)
{
doesClose[i] = false
}
}})
}
}
}
}
.navigationTitle("List")
}
}
private func turnAllOtherButtonsOff(onIndex:Int)
{
for i in 0..<doesClose.count {
if(i != onIndex)
{
doesClose[i] = false
}
}
}
}
我也试着在执行阶段运行函数,出现了类似的错误。感谢任何帮助。
1条答案
按热度按时间pkmbmrz71#
如果这对大家有帮助的话,我把遍历数组的想法抛在一边,只专注于跟踪上一个索引,然后在有onChange时切换它。下面是代码。