【问题标题】:Swift: create a flat array of views from view hierarchySwift:从视图层次结构创建一个平面视图数组
【发布时间】:2018-08-18 12:13:19
【问题描述】:

我有一个视图层次结构,我需要将它展平成一个线性数组,比如:

+ rootView 0 - subView 1 - subview 2 + subview 3 - subview 3.1 - subview 3.2 - subview 4

我需要一个数组:

[0, 1, 2, 3, 3.1, 3.2, 4]

我想知道是否可以使用mapflatMap,还是必须使用广度优先遍历等传统方式?

谢谢!

【问题讨论】:

标签: arrays swift dictionary uiview flatmap


【解决方案1】:

我会使用递归函数,您可以在 rootView 上调用它。

func flattenSubviews(view: UIView) -> [UIView] {
    
    var flatArray: [UIView] = []
    flatArray.append(view)
    
    for subview in view.subviews {
        flatArray += flattenSubviews(view: subview)
    }
    return flatArray
}

.

let flattenedViews = flattenSubviews(view: rootView)

通过将其放在扩展中来编写上述内容的一种稍微抽象的方式:

extension UIView {

    func subviewsFlattened() -> [UIView] {
    
        var output: [UIView] = []
        output.append(self)
    
        for subview in self.subviews {
            output += subview.subviewsFlattened()
        }
    
        return output
    }

}

然后你可以在任何视图上调用它:

let allViews = someView.subviewsFlattened()

【讨论】:

  • 我认为我们将每个父母加倍。那不就行了吗? view.subviews.flatMap { flattenSubviews(of: $0) }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-11
  • 1970-01-01
  • 2022-11-16
  • 1970-01-01
相关资源
最近更新 更多