如何创建一个序列来迭代从 UIView 到视图层次结构到根的所有祖先(超级视图)?

Jon*_*son 3 cocoa-touch uikit uiview ios swift

我想要UIView一个属性,它返回层次结构中视图的所有祖先的序列。这对于查找与特定类型匹配的最近的一个这样的目的很有用:

let tableView = cell.ancestors.first(where: { $0 is UITableView })
Run Code Online (Sandbox Code Playgroud)

实现该属性的好方法是什么ancestors

Pau*_*tos 5

使用Swift 标准库sequence(first:next:)中的函数,还可以实现更短的解决方案:

extension UIView {
    var ancestors: AnySequence<UIView> {
        return AnySequence<UIView>(
            sequence(first: self, next: { $0.superview }).dropFirst())
    }
}
Run Code Online (Sandbox Code Playgroud)