SwiftUI:无法转换类型为';布尔';到预期的参数类型';装订<;布尔>';

SwiftUI:无法转换类型为';布尔';到预期的参数类型';装订<;布尔>';,swiftui,Swiftui,为SwiftUI创建基于文本的游戏 想知道为什么我不能在字符ForEach循环中访问isSelected 获取此错误:无法在此行上将“Bool”类型的值转换为预期的参数类型“Binding” 切换(isOn:character.isSelected){ 变量对象声明: @Binding var characters:[字符] 代码如下: VStack { ForEach(characters) { character in

为SwiftUI创建基于文本的游戏

想知道为什么我不能在字符ForEach循环中访问isSelected

获取此错误:无法在此行上将“Bool”类型的值转换为预期的参数类型“Binding”

切换(isOn:character.isSelected){

变量对象声明:
@Binding var characters:[字符]

代码如下:

        VStack {

            ForEach(characters) { character in

                HStack{

                    VStack(alignment:.leading) {
                        Text("\(character.name)")
                            .fontWeight(.bold)

                        Text("\(character.description)")
                        .lineLimit(10)

                    }

                    Spacer()

                    Toggle(isOn: character.isSelected){
                        Text("a")
                    }.labelsHidden()

您只需添加$:

Toggle(isOn: $character.isSelected){

字符
本身没有绑定,它只是一个值,它需要通过下标从
字符
传输绑定,因此这里有一个解决方案(
。枚举
用于访问索引和值)

ForEach(数组(characters.enumerated()),id:\.element){i,中的字符
HStack{
VStack(对齐:。前导){
文本(“\(character.name)”)
.fontWeight(.粗体)
文本(“\(character.description)”)
.lineLimit(10)
}
垫片()

切换(isOn:self.$characters[i].isSelected){/我得到了同样的错误,但在我的例子中,绑定本身是一个
Bool

通过添加
.wrappedValue
修复:

nameOfBinding.wrappedValue

这样做表明
X不在范围内
那么您的“绑定变量”位于错误的位置或者您输入了错误的变量名。
nameOfBinding.wrappedValue