从多选择器行中检索值时出现问题

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 方法吗?想知道是否有人会采取不同的做法。

再次感谢!