基本上我是想在Swift中做这个。
// get the Detail view controller in our UISplitViewController (nil if not in one)
id detail = self.splitViewController.viewControllers[1];
// if Detail is a UINavigationController, look at its root view controller to find it
if ([detail isKindOfClass:[UINavigationController class]]) {
detail = [((UINavigationController *)detail).viewControllers firstObject];
}
我已经达到了这个目标;
var detail : AnyObject = self.splitViewController.viewControllers[1]
if detail.isKindOfClass(UINavigationController) {
detail = ((detail: UINavigationController).detail).
但在此之后我找不到该怎么做。
另一个单独的快速问题。以as [type]
结尾的大量陈述被视为良好做法。这主要是因为使用了AnyObject,比如使用valueForKeyPath。看起来我的代码看起来有点凌乱
答案 0 :(得分:3)
以下是使用Optional Binding在Swift中执行此操作的方法:
// get the Detail view controller in our UISplitViewController (nil if not in one)
var detail = self.splitViewController.viewControllers[1];
// if Detail is a UINavigationController, look at its root view controller to find it
if let nav = detail as? UINavigationController {
detail = nav.viewControllers[0];
}
至于你的问题,是的,在使用ObjC API时,在Swift中使用as type
是很常见的。这是从ObjC到强类型Swift语言的副产品,当用Swift编写更多的库并且使用更少的ObjC时,它会变得更好!