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]
不知map
或flatMap
是否可以,还是必须使用像广度优先遍历这样的传统方式?
谢谢!
我会使用递归函数,您可以在 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()
我有一个视图层次结构,我需要将它展平成一个线性数组,比如说:
+ 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
是否可以,还是必须使用像广度优先遍历这样的传统方式?
谢谢!
我会使用递归函数,您可以在 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()