热门标签 | HotTags
当前位置:  开发笔记 > IOS > 正文

SwiftUI中的@Binding和ForEach

如何解决《SwiftUI中的@Binding和ForEach》经验,为你挑选了2个好方法。

我不能理解如何在SwiftUI @Binding中结合使用ForEach。假设我要Toggle根据布尔数组创建s 的列表。

struct ContentView: View {
    @State private var boolArr = [false, false, true, true, false]

    var body: some View {
        List {
            ForEach(boolArr, id: \.self) { boolVal in
                Toggle(isOn: $boolVal) {
                    Text("IsOn")
                }                
            }
        }
    }
}

我不知道如何将绑定传递给数组中的布尔对象Toggle。上面的代码给出此错误:

使用未解决的标识符“ $ boolVal”

好的,这对我来说很好(当然)。我试过了:

struct ContentView: View {
    @State private var boolArr = [false, false, true, true, false]

    var body: some View {
        List {
            ForEach($boolArr, id: \.self) { boolVal in
                Toggle(isOn: boolVal) {
                    Text("IsOn")
                }                
            }
        }
    }
} 

这次错误是:

在'ForEach'上引用初始化程序'init(_:id:content :)'要求'Binding'符合'Hashable'

有办法解决这个问题吗?



1> Andre Carrer..:

在SwiftUI中,仅使用Identifiable结构而不是Bools

struct ContentView: View {
    @State private var boolArr = [BoolSelect(isSelected: true), BoolSelect(isSelected: false), BoolSelect(isSelected: true)]

    var body: some View {
        List {
            ForEach(boolArr.indices) { index in
                Toggle(isOn: self.$boolArr[index].isSelected) {
                    Text("Is on")
                }
            }
        }
    }
}

struct BoolSelect: Identifiable {
    var id = UUID()
    var isSelected: Bool
}



2> kontiki..:

您可以使用类似下面的代码。请注意,您将获得不赞成使用的警告,但要解决此问题,请检查其他答案:https : //stackoverflow.com/a/57333200/7786555

import SwiftUI

struct ContentView: View {
    @State private var boolArr = [false, false, true, true, false]

    var body: some View {
        List {
            ForEach(boolArr.indices) { idx in
                Toggle(isOn: self.$boolArr[idx]) {
                    Text("boolVar = \(self.boolArr[idx] ? "ON":"OFF")")
                }
            }
        }
    }
}


推荐阅读
author-avatar
死性Oo不改2502917357
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有