我有一个 NSViewController
扩展,它遍历其所有后代 subview Controller ,寻找第一个通过特定测试(由用户定义的 block 指定)的 View Controller :
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
}
}
99% 的时间我的测试包括一个简单的类型检查...
contentViewController.descendantViewControllerPassingTest {$0 is OutlineViewController}
...所以我想创建一个简短的便利扩展来执行此操作:
extension NSViewController {
func descendantViewControllerMatchingType(type: WHAT_HERE?) {
return descendantViewControllerPassingTest({ $0 is WHAT_HERE? })
}
}
但我不知道我的参数type 应该是什么type
。我试过 AnyClass
和 AnyObject
但编译器告诉我这些不是类型:
最佳答案
Closures是我会用的。将您的对象传递给返回类型为 BOOL 的闭包。使用闭包以递归方式匹配您的后代。
关于swift - 搜索与特定类型匹配的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38223485/