将过滤后的字符串数组附加到 UILables - Swift

Append filtered string array to UILables - Swift

长标题!我真的很抱歉。

预期结果: 在 stackView 的 UIView 内的 UILabel 中显示唯一字符串值。 stackView 中可能有多个 UIView。 stackView 位于 tableCell 中。哇....

视图和单元格是自定义的,不允许我创建部分。我必须使用现有代码库中的内容。

问题 我一直在尝试将唯一的可选字符串值放入相应的 UILabel。我有一个工作扩展,可以从数组中获取唯一项。但我只是不知道在哪里实现它,以获得我需要的唯一值。

代码:

// Sample Model Structs
struct Parent {
    var child: [Child]?
}

struct Child {
    var childValue: String?
}

class TableViewCell {  
    var stackView = UIStackView()
    func configureCellFrom(parent: Parent) {
        /// Other code lives in the func to use the Parent struct.   
        if let child = parent.child {
            if child.count > 1 {
                tableCell.topLabel.text = "Multiple Child Values"
                tableCell.ShowChildViewsButton.isHidden = false
                for value in child {
                    let view = CustomUIView() 
                    view.childValue.text = value.childValue.uniqued()
                    self.stackView.addArrangedSubview(view)
                }      
            }
        }
    }
}   
    

extension Sequence where Element: Hashable {
    func uniqued() -> [Element] {
        var set = Set<Element>()
        return filter { set.insert([=14=]).inserted }
    }
}

上述问题: 我放置 uniqued() 方法的地方将解析出字符串中的各个字符。所以我知道它太深了一层。达到我要求的结果的最佳方法是什么?

试试这个:

for (i, value) in child.enumerated() {
    let view = CustomUIView()
    view.childValue.text = value.childValue.uniqued()[i]
    self.stackView.addArrangedSubview(view)
}

这里的问题是 uniqued 方法使用与您在问题中显示的 uniqued 方法相同的 post 中的 filter method declared on Sequence which will always return an array of the Sequence.Element in the case of a String an array of characters [Character]. You can simply initialize a new string with the array or characters or improve that method to support strings as well. To make that method support strings you need to extend RangeReplaceableCollection. There is a filter method declared on RangeReplaceableCollection which returns Self therefore if you filter a string it will return another string as I showed in this answer

extension RangeReplaceableCollection where Element: Hashable {
    var orderedSet: Self {
        var set = Set<Element>()
        return filter { set.insert([=10=]).inserted }
    }
}

用法:

view.childValue.text = value.childValue?.orderedSet