在Swift中访问堆栈上的视图控制器数组

时间:2014-06-29 20:43:50

标签: ios swift cs193p

基本上我是想在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。看起来我的代码看起来有点凌乱

1 个答案:

答案 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时,它会变得更好!