使用函数Swift搜索UIView层次结构

rus*_*ish 3 functional-programming ios swift

我编写了一个函数,它遍历给定UIView的超级视图,以获取对特定UIView子类的引用(如果存在)(在本例中为UITableView).使用命令式样式可以很好地工作,但它似乎是一个非常适合'铁路导向编程'的问题.由于我仍然在考虑功能,有人能够推荐一个更优雅的功能版本吗?

func findTableView(var view: UIView) -> UITableView? {
    var table: UITableView? = nil
    while table == nil {
        guard let superView = view.superview else { return nil }
        view = superView
        table = view as? UITableView
    }
    return table
}
Run Code Online (Sandbox Code Playgroud)

rin*_*aro 7

像这样?

func findTableView(view: UIView) -> UITableView? {
    return view as? UITableView ?? view.superview.flatMap(findTableView)
}
Run Code Online (Sandbox Code Playgroud)

这段代码只是一个简短的代码:

func findTableView(view: UIView) -> UITableView? {
    if let tableView = view as? UITableView {
        return tableView
    }
    else {
        let superview = view.superview
        if superview == nil {
            return nil
        }
        else {
            return findTableView(superview!)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在枚举上使用"Nil Coalescing Operator"flatMap(_:)方法Optional.