我有一个视图层次结构,我需要将其展平为线性数组,比如说:
+ 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]
我想知道是否可以使用map
或flatMap
,或者我是否必须使用传统方式,例如广度优先遍历?
谢谢!
答案 0 :(得分: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)