SwiftUI:无法将“Bool”类型的值转换为预期的参数类型“Binding<Bool>”

aye*_*lvs 18 swiftui

为 SwiftUI 创建一个基于文本的游戏

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

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

Toggle(isOn: character.isSelected){

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

代码在这里:

        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()
Run Code Online (Sandbox Code Playgroud)

osk*_*rko 26

就我而言,我需要传递“true”,而不是变量......

解决方案很简单:

.constant(true)
Run Code Online (Sandbox Code Playgroud)


Nel*_*elu 18

我遇到了同样的错误,但就我而言,绑定本身是一个Bool.

通过添加修复.wrappedValue

nameOfBinding.wrappedValue
Run Code Online (Sandbox Code Playgroud)


Kuh*_*ann 8

你只需要添加一个 $:

Toggle(isOn: $character.isSelected){
Run Code Online (Sandbox Code Playgroud)


Asp*_*eri 6

Acharacter本身没有绑定,它只是一个值,它需要characters通过下标传递绑定,所以这里有一个解决方案(.enumerated用于获取索引和值的访问)

ForEach(Array(characters.enumerated()), id: \.element) { i, character in

    HStack{

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

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

        }

        Spacer()

        Toggle(isOn: self.$characters[i].isSelected){ // << here !!
            Text("a")
        }.labelsHidden()
Run Code Online (Sandbox Code Playgroud)