если пусть editIte mVC = segue.destination как? ItemDetailViewController {} не работает - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть два segues в этой таблице ViewController, но при подготовке к работе (для: segue) не работает downcasting.

override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
    print("into segue")
    super.prepare(for: segue, sender: sender)

    switch segue.identifier {
    case "addItem":
        print("addItem Segue")
        if let addItemVC = segue.destination as? ItemDetailViewController {
            print("if let done")
            addItemVC.container = container
        } else {
            print("WTF")
        }
    case "editItem":
        print("editItem Segue")
        if let editItemVC = segue.destination as? ItemDetailViewController {
            guard let selectedItemCell = sender as? PriorityListTVCell else {
                fatalError("Unexpected sender: \(String(describing: sender))")
            }
            guard let indexPath = tableView.indexPath(for: selectedItemCell) else {
                fatalError("The selected cell is not being displayed by the table")
            }

            editItemVC.editedInfo = list[indexPath.row]
            print("passed indexPath.row: \(indexPath.row)")
            editItemVC.container = container
        }
    default:
        break
    }
}

если я нажму кнопку «добавить», в консоли он выведет out

into segue
addItem Segue
WTF

не уверен, почему не работает downcasting, имеет ли это какое-либо отношение к переходным типам назначения? Спасибо за помощь!

1 Ответ

0 голосов
/ 15 февраля 2020

Это

if let addItemVC = segue.destination as? ItemDetailViewController {

не будет работать, если назначение v c не относится к типу ItemDetailViewController, что означает, что вам нужно назначить имя класса в IB, для справки вы можете сделать

print(type(of:segue.destination))

Для навигации выполните

if let nav = segue.destination as? UINavigationController , 
   let addItemVC = nav.viewControllers?.first as? ItemDetailViewController {}
...