从多选择器行中检索值时出现问题
Having issues retrieving values from a Multiple Selector Row
我整天都在想办法解决这个问题,但一直没有成功。我想要做的是从多个 selector 行中检索 selected 值。到目前为止,该行完全正常运行,我已经能够对其进行设置,以便我的选项是结构。
我遇到的问题快要结束时需要从表单中检索数据。我能够使用 form.values()
并且知道如何在大部分时间使用字典。
当我调用多行中的值时,它们显示为 'Sets'。我对 Swift 还比较陌生,所以我以前没有处理过这些,但从我目前所读的内容来看,它们是像数组这样的集合类型?
这是给我带来问题的部分:
//
<<< ButtonRow("btnnRow") { row in
row.title = "Confirm selection."
row.onCellSelection({ (cell, row) in
let formValues = self.form.values()
let koko = formValues["multiSelectTest"] as! Set<MultiTestStruct>
switch koko.isEmpty {
case true:
print("Set is empty")
case false:
print("Set is NOT empty!")
}
})
}
这是我尝试过的最新版本。它能够在第一次加载时打印 'empty',但是一旦我 select 一个选项并再次取消 select 它,崩溃!
我认为我在 selection 之后遇到了问题,因为当我打印所有值时,它最初是 "multiSelectTest": nil
,但是在多行中创建 selection 之后取消select它,这就是它变成的:"multiSelectTest": Optional(Set([]))
.
抱歉,如果这没有意义,如果需要,我很乐意进一步解释,现在是凌晨 2 点,我的大脑非常疲惫!
TL:DR - 如何从多个 selection 行中获取值。
感谢您的阅读。
更新:错误消息 - Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
- 如果我尝试在 selecting 和 unselecting 之前获取行值,我会收到此错误。一旦 selection 被切换,就没有问题了。
这是制作 selection 之前所有值的控制台输出:
["btnRow": nil, "btnRow2": nil, "multiSelectTest": nil]
这是select输入选项后的控制台输出:
["btnRow": nil, "btnRow2": nil, "multiSelectTest": Optional(Set([theDD_Admin.MultiTestStruct(name: "HELLO!")]))]
最后,这是在我清除了所有选项的多行之后:
["btnRow": nil, "btnRow2": nil, "multiSelectTest": Optional(Set([]))]
我的主要行动计划是在 multi 为 nil
时调用多行值,但如您所见,它在未被触及的情况下仅为 nil。把一个选项变成偶数后selecting,它变成了一个集合,我从那里迷路了。
谢谢
根据@koropok 的评论,这就是我想出的办法。在多行中,我设置了 .onChange
行为 -
row.onChange({ (row) in
if row.value?.isEmpty == true {
// if row Set<> is empty then this row will be cleared and set to nil
self.form.setValues(["multiSelectTest" : nil])
}
})
当我尝试执行 row.value = nil
时,我 运行 遇到了一个错误,而这种方式正在按预期工作。
这是我想出的,到目前为止对我来说效果很好。对于那些比我更有经验的人,这是 correct/best 方法吗?想知道是否有人会采取不同的做法。
再次感谢!
我整天都在想办法解决这个问题,但一直没有成功。我想要做的是从多个 selector 行中检索 selected 值。到目前为止,该行完全正常运行,我已经能够对其进行设置,以便我的选项是结构。
我遇到的问题快要结束时需要从表单中检索数据。我能够使用 form.values()
并且知道如何在大部分时间使用字典。
当我调用多行中的值时,它们显示为 'Sets'。我对 Swift 还比较陌生,所以我以前没有处理过这些,但从我目前所读的内容来看,它们是像数组这样的集合类型?
这是给我带来问题的部分:
//
<<< ButtonRow("btnnRow") { row in
row.title = "Confirm selection."
row.onCellSelection({ (cell, row) in
let formValues = self.form.values()
let koko = formValues["multiSelectTest"] as! Set<MultiTestStruct>
switch koko.isEmpty {
case true:
print("Set is empty")
case false:
print("Set is NOT empty!")
}
})
}
这是我尝试过的最新版本。它能够在第一次加载时打印 'empty',但是一旦我 select 一个选项并再次取消 select 它,崩溃!
我认为我在 selection 之后遇到了问题,因为当我打印所有值时,它最初是 "multiSelectTest": nil
,但是在多行中创建 selection 之后取消select它,这就是它变成的:"multiSelectTest": Optional(Set([]))
.
抱歉,如果这没有意义,如果需要,我很乐意进一步解释,现在是凌晨 2 点,我的大脑非常疲惫!
TL:DR - 如何从多个 selection 行中获取值。
感谢您的阅读。
更新:错误消息 - Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
- 如果我尝试在 selecting 和 unselecting 之前获取行值,我会收到此错误。一旦 selection 被切换,就没有问题了。
这是制作 selection 之前所有值的控制台输出:
["btnRow": nil, "btnRow2": nil, "multiSelectTest": nil]
这是select输入选项后的控制台输出:
["btnRow": nil, "btnRow2": nil, "multiSelectTest": Optional(Set([theDD_Admin.MultiTestStruct(name: "HELLO!")]))]
最后,这是在我清除了所有选项的多行之后:
["btnRow": nil, "btnRow2": nil, "multiSelectTest": Optional(Set([]))]
我的主要行动计划是在 multi 为 nil
时调用多行值,但如您所见,它在未被触及的情况下仅为 nil。把一个选项变成偶数后selecting,它变成了一个集合,我从那里迷路了。
谢谢
根据@koropok 的评论,这就是我想出的办法。在多行中,我设置了 .onChange
行为 -
row.onChange({ (row) in
if row.value?.isEmpty == true {
// if row Set<> is empty then this row will be cleared and set to nil
self.form.setValues(["multiSelectTest" : nil])
}
})
当我尝试执行 row.value = nil
时,我 运行 遇到了一个错误,而这种方式正在按预期工作。
这是我想出的,到目前为止对我来说效果很好。对于那些比我更有经验的人,这是 correct/best 方法吗?想知道是否有人会采取不同的做法。
再次感谢!