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

问题描述 投票:0回答:1

我一直想把这一天弄清楚,并且都没有成功。我要做的是从多选择器行中检索选定的值。到目前为止,该行完全正常运行,我已经能够设置它,以便我的选项是结构。

当我需要从表单中检索数据时,我遇到的问题即将结束。我能够使用form.values()并且知道如何使用字典大部分。

当我调用多行中的值时,它们会以“集合”形式出现。我还是相对较新的Swift,所以我以前没有处理过这些,但从我到目前为止所读到的它们是像Arrays这样的集合类型?

这是给我问题的部分:

//
        <<< 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!")
                }
            })
    }

这是我尝试过的最新版本。它可以在第一次加载时打印“空”,但是一旦我选择了一个选项并再次取消选择,就会崩溃!

我认为我在选择后遇到问题,因为当我打印所有值时,它最初是"multiSelectTest": nil,但是在多行中进行选择然后取消选择它之后,它就变成了:"multiSelectTest": Optional(Set([]))

抱歉如果这没有意义,我很乐意在需要的时候进一步解释,现在凌晨2点,我的脑子已经疲惫不堪!

TL:DR - 如何从多选行中获取值。

谢谢你的阅读。

更新:错误消息 - Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value - 如果我在选择和取消选择之前尝试获取行值,则会收到此错误。切换选择后,没有问题。

这是在进行选择之前所有值的控制台输出:

["btnRow": nil, "btnRow2": nil, "multiSelectTest": nil]

这是选择选项后的控制台输出:

["btnRow": nil, "btnRow2": nil, "multiSelectTest": Optional(Set([theDD_Admin.MultiTestStruct(name: "HELLO!")]))]

最后,这是在我清除了所有选项的多行之后:

["btnRow": nil, "btnRow2": nil, "multiSelectTest": Optional(Set([]))]

我的主要行动计划是要求多行值,如果多是nil,但你可以看到它只是零而未受影响。在做出一个甚至没有选择的选项之后,它变成了一个集合,我从那里迷失了。

谢谢

swift swift4.2 eureka-forms
1个回答
0
投票

从@ 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时,我遇到了一个错误,这种方式按预期工作。

这就是我想出来的,到目前为止对我来说效果很好。对于那些比我更有经验的人来说,这是正确/最好的方法吗?想知道是否有人会采取不同的做法。

再次感谢!

© www.soinside.com 2019 - 2024. All rights reserved.