搜索与特定类型匹配的对象

时间:2016-07-06 12:00:45

标签: swift macos cocoa

我有一个NSViewController扩展,遍历所有后代子视图控制器,寻找通过特定测试的第一个视图控制器(由用户定义的块指定):

extension NSViewController {

    func descendantViewControllerPassingTest(test: (viewController: NSViewController) -> Bool) -> NSViewController? {
        var retval: NSViewController?
        for childViewController in childViewControllers {
            if test(viewController: childViewController) {
                retval = childViewController
            } else if let descendantViewController = viewController.descendantViewControllerPassingTest(test)  {
                retval = descendantViewController
            }
            if retval != nil { break }
        }
        return retval
    }
}

百分之九十九的时间我的测试包括简单的类型检查...

contentViewController.descendantViewControllerPassingTest {$0 is OutlineViewController}

...所以我想创建一个简短的便利扩展来做到这一点:

extension NSViewController {
    func descendantViewControllerMatchingType(type: WHAT_HERE?) {
        return descendantViewControllerPassingTest({ $0 is WHAT_HERE? })
    }
}

但我无法确定type我的参数类型应该是什么。我试过AnyClassAnyObject,但编译器告诉我这些不是类型:

enter image description here

1 个答案:

答案 0 :(得分:0)

Closures是我使用的。使用返回类型BOOL将对象传递给闭包。使用闭包递归地匹配你的后代。