1
我有一个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
我的参数类型应该是。我试过AnyClass
和AnyObject
但编译器告诉我,这些都不类型:
我对泛型没有多少经验,但我认为对泛型的理解是正确的方向。我想你可以使用泛型类型。但正如我所说,我没有足够的经验来提供更多帮助。 – Andrej