Swift: 从视图层次结构创建平面视图数组

Swift: create a flat array of views from view hierarchy

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

+ 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是否可以,还是必须使用像广度优先遍历这样的传统方式?

谢谢!

我会使用递归函数,您可以在 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()