我尝试在SwiftUI中创建一个表。此表将包含三列:
| 已启用|名称名称名称|版本号|
| - -|- -|- -|
| 根据项目的 isEnabled bool值开启或关闭的切换|根据项目的 name 字符串的项目名称|根据项目的 version 字符串的项目版本|
我使用的数据模型如下所示:
let mods: [Mod] = [
Mod(name: "Some cool mod", version: "1.2", isEnabled: true),
Mod(name: "Another interesting item", version: "1.4", isEnabled: true),
Mod(name: "Very Cool", version: "10.1.45", isEnabled: false)
]
我使用绑定将此数据传递给另一个视图(称为 InstanceSettingMods)。
@Binding var mods: [Mod]?
在父视图中,它是这样传入的:
InstanceSettingMods(mods: $mods)
我在使用 Name 和 Version 创建和填充表时没有遇到任何问题,但我不知道如何实现 Enabled 列。Toggle需要一个绑定,但我不知道如何将绑定传递给它。
该表的定义如下:
struct InstanceSettingMods: View {
@Binding var mods: [Mod]?
var body: some View {
Table(mods!) {
TableColumn("Enabled") {
TOGGLE GOES HERE
}
TableColumn("Name", value: \.name)
TableColumn("Version", value: \.version)
}
}
}
我可以将 isEnabled 的值传递到Table中,如果我将它们转换为String,则显示它们,如下所示:
struct InstanceSettingMods: View {
@Binding var mods: [Mod]?
var body: some View {
Table(mods!) {
TableColumn("Enabled") { toggleValue in
Text(toggleValue.isEnabled.description)
}
TableColumn("Name", value: \.name)
TableColumn("Version", value: \.version)
}
}
}
Table with isEnabled values as Strings
由于Toggle需要一个绑定,如果我尝试以这种方式创建Toggle,我会收到错误***在范围内找不到'$toggleValue'***:
TableColumn("Enabled") { toggleValue in
Toggle("", isOn: $toggleValue.isEnabled)
}
如果我从定义中删除**$**,则会得到以下错误:无法将型别'Bool'的值转换成预期的参数型别'Binding'
我想知道如何创建一个切换,让我启用/禁用表中的每个国防部。
1条答案
按热度按时间ca1c2owp1#
解决方案是通过以下方式创建自定义绑定: