2017-12-03 89 views
0

我正在嘗試從一個VC到一個嵌入在導航控制器中的segue。navController.topViewController或navController.viewControllers.first?

爲了我的目的,這兩行代碼似乎完成了同樣的事情,但想知道它們之間的真正區別是什麼以及它是否對另一個有利。

這個...

if let navController = segue.destination as? UINavigationController { 

是這樣的:

let viewController = navController.viewControllers.first as? myViewController 

或本:

let viewController = navController.topViewController as? myViewController 

更好?

回答

1

這取決於你的意思。

  • first視圖控制器是導航控制器的第一子視圖控制器。

  • topViewController最後導航控制器的子視圖控制器。

所以它們是相反的。它發生,在這種情況下,他們是相同的視圖控制器,因爲導航控制器只有一個子視圖控制器。但是,如果我是你,我不會養成這樣的習慣,即想象這兩條線會說同樣的話。他們不。

(就個人而言,我不說任何的那些東西。我說navController.viewControllers[0]。我說as!,因爲我已經織補以及更好的是對有關類視圖控制器或我要崩潰了。)

1

正如評論中提到的亞光,「.first」和「topViewControllers」是相反的。

「.first」是viewControllers數組中的第一個VC(索引0),「.topViewController」是最後一個(索引n-1)。

如果你在導航控制器內只有一個VC,它們將是相同的,但是如果你有多個VC,它們將意味着不同的VC。

更好的選擇將取決於你想繼續使用哪個VC。不過,我認爲最常見的是「.topViewController」,因爲它會延續到最近加載的VC或第一個,如果沒有加載。