【问题标题】:SwiftUI: Cannot convert value of type 'Bool' to expected argument type 'Binding<Bool>'SwiftUI:无法将“Bool”类型的值转换为预期的参数类型“Binding<Bool>”
【发布时间】:2020-09-03 06:59:15
【问题描述】:

为 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()

【问题讨论】:

    标签: swiftui


    【解决方案1】:

    我遇到了同样的错误,但在我的情况下,绑定本身Bool

    已通过添加 .wrappedValue: 修复:

    nameOfBinding.wrappedValue
    

    【讨论】:

      【解决方案2】:

      一个character本身是没有绑定的,它只是一个值,它需要通过下标从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()
      

      【讨论】:

      • 谢谢 Asperi,我认为这应该是公认的答案。 (当 Foreach 和 Binding 结合在一起时。)
      【解决方案3】:

      你只需要添加一个 $:

      Toggle(isOn: $character.isSelected){
      

      【讨论】:

      • 那么你的“@Binding var”位置不对或者变量名输入错误。
      • 你不能在 ForEach 循环中使用它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多