Прежде всего, лучше безопасно развернуть контроллеры вида. Вот так:
if let myViewController = segue.destination as? MyViewController {
// Set up the VC, add some values and options
}
Второе - вам не нужно вызывать executeSegue , выполнение для segue уже вызывает ваш контроллер представления. Просто удалите executeSegue
Третье - вы можете упростить и применить такую логику:
enum AppSegueName: String {
case Normal = "NormalPushupSegue"
case Diamond = "DiamondPushupSegue"
case Wide = "WidePushupSegue"
case Decline = "DeclinePushupSegue"
}
extension AppSegueName: CaseIterable {}
А при подготовке func используйте оператор switch \ case и сравните необработанное значение AppSegueName с segue.identifier
вроде так:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
AppSegueName.allCases.forEach {
if $0.rawValue == segue.identifier {
if let myViewController = segue.destination as? MyViewController {
myViewController.formType = $0 // formType is of type AppSegueName
}
}
}
}