Не удалось отличить значение типа "UINavigationController"

Я реализую интерфейс поиска для своего приложения, поэтому в основном я передам ключевое слово поиска из одного ViewController в другой ViewController.

Я сделал этот тип параметров несколько раз, но на этот раз кажется странным. Целевой объект ViewController встроен в контроллер навигации.

Теперь код выглядит примерно так.

override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject!) {
    if (segue?.identifier == "home_to_search") {

       var searchKeyword = txtSearchBarHome.text
       var svc = segue?.destinationViewController as! SearchViewController;
       svc.toPassSearchKeyword = searchKeyword;

       //let nav = segue?.destinationViewController as! UINavigationController
       //let svc = nav.topViewController as! SearchViewController
       //svc.toPassSearchKeyword = searchKeyword;
    }
}

Я уже изучил эти вопросы DestinationViewController Segue и UINavigationController swift, Как изменить значения, когда мой ViewController встроен в UINavigationController? без удачи.

Что заставляет меня задаться вопросом, что у меня уже есть ViewControllers, встроенные в контроллеры навигации, которые я могу передавать параметры путем segueing. Однако в этом случае он выбрасывает Не может отличить значение типа "UINavigationController" . Если я пробую прокомментированный код выше, он не вызывает ошибку там, а в классе AppDelegate.

Ответ 1

Отвечая на мой вопрос. В этом случае нам нужно получить доступ к дочернему виду, выполнив что-то вроде этого:

let nav = segue?.destinationViewController as! UINavigationController
let svc = nav.topViewController as! SearchViewController
svc.toPassSearchKeyword = searchKeyword;

Ответ 2

На основе ответа Semih вы также можете сделать это, чтобы передать переменную в следующий сегмент, если вы не хотите использовать идентификатор:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let nav = segue.destination as? UINavigationController, 
        let vc = nav.topViewController as? TestViewController {
        vc.username = "Test"
    }
}

Ответ 3

Просто быстрое примечание для тех, кто изучает эту проблему, она была переименована в Destination

let nav = segue.destination as! UINavigationController
let svc = nav.topViewController as! SearchViewController
svc.toPassSearchKeyword = searchKeyword;