Поскольку ваш View Controller встроен в Navigation Controller, вам также необходимо извлечь его из Navigation Controller.
Попробуйте:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
guard let nvc = segue.destination as? UINavigationController, let vc = nvc.viewControllers.first as? DestinationViewController else {
return
}
vc.id = id
}
Сначала вы получите навигационный контроллер (nvc), то вы получите целевой VC из списка дочерних контроллеров представления. Как правило, первый контроллер в контроллере навигации будет первым в массиве.
Также вам не нужно указывать отправителя в вызове executeSegue.
self.performSegue(withIdentifier: "DestinationViewController", sender: nil)
Вы заметите, что prepareForSegue имеет параметр sender, но, поскольку вы получаете доступ к информации, которую хотитепередавайте DetailViewController через переменную класса в вашем первом View Controller, вы все равно не используете этот параметр отправителя.
Надеюсь, это поможет