2017-12-03 4 views
0

VC에서 세게를 nav 컨트롤러에 내장 된 것으로 만드는 중입니다.navController.topViewController 또는 navController.viewControllers.first?

내 목적을 위해,이 두 코드 줄은 모두 같은 결과를 얻었지만 실제로 차이점이 무엇인지, 또 다른 점에 유리한 점이 무엇인지 궁금해하고있었습니다.

let viewController = navController.topViewController as? myViewController 

더 나은 :

let viewController = navController.viewControllers.first as? myViewController 

나이 : 이것에 대한

...

if let navController = segue.destination as? UINavigationController { 

이 무엇입니까?

답변

1

의미에 따라 다릅니다.

  • first보기 컨트롤러 탐색 컨트롤러의 아이 뷰 컨트롤러이다.

  • topViewController은 내비게이션 컨트롤러의 마지막 하위보기 컨트롤러입니다.

그래서 서로 상반됩니다. 이 경우에는 네비게이션 컨트롤러에 하나의 하위보기 컨트롤러 만 있기 때문에 동일한보기 컨트롤러입니다. 하지만 나는 너라면 그 습관에 빠지지 않을 것이다. 그 두 줄이 똑같은 말을하는 것을 상상해 보라. 그들은하지 않습니다.

(개인적으로, 나는 그런 것들 중 하나를 말을하지 않습니다. 나는 navController.viewControllers[0]을 말한다. 그리고 그 뷰 컨트롤러의 클래스에 대한 괜찮을보다 더 잘 꿰매했던 아니면 충돌 할 때문에, as!을 말한다.)

1

주석에 언급 된 것과 같이 ".first"와 "topViewControllers"는 반대입니다.

". first"는 viewControllers 배열의 첫 번째 VC (인덱스 0)이고 ".topViewController"는 마지막 (인덱스 n-1)입니다.

내비게이션 컨트롤러 안에 하나의 VC 만 있으면 동일하지만 두 개 이상인 경우 서로 다른 VC를 의미합니다.

더 나은 옵션은 어떤 VC에 연결 하느냐에 달려 있습니다. 그러나 가장 최근에로드 된 VC 또는 첫 번째로로드 된 VC가 아직로드되지 않았으므로 가장 일반적인 것이 ".topViewController"라고 생각합니다.