2014-06-29 299 views
3
在棧中讀取視圖控制器的陣列

基本上我想這樣做的雨燕斯威夫特

// 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一樣。它只是似乎有點亂有它在我的代碼

回答

3

這裏有一個方法,在斯威夫特使用可選裝訂做:

// 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]; 
} 

至於你的問題,是其相當普遍的使用as type各地在使用ObjC API時放置在Swift中。這是從ObjC到強類型的Swift語言的副產品,當在Swift中編寫更多的庫並且使用更少的ObjC時它應該會變得更好!

+0

多數民衆贊成在完美!只是把我的代碼OCD拉上牆! – Sawyer05

+0

@ Sawyer05我認爲它實際上使代碼更易讀,更清爽。目前,我非常喜歡Swift中的類型推理,當我在ObjC比Swift更加註重時,我的OCD現在已經開始了:p – Jack

+0

我想我只是喜歡短而甜的代碼。問題#100000 - 我試圖將一個刷新控件鏈接到一個IBAction函數,但它只給我一個選項來爲它創建一個出口 – Sawyer05