如果让 editItemVC = segue.destination as?ItemDetailViewControll



我在这个表ViewController中有两个segue,但是ready(for:segue(中的向下转换不起作用。

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
}
}

如果我单击"添加"按钮,它将在控制台中打印出来

into segue
addItem Segue
WTF

不知道为什么向下投射不起作用,它与目的地的 segue 类型有什么关系吗? 感谢您的帮助!

if let addItemVC = segue.destination as? ItemDetailViewController {

如果目标 vc 不是 ItemDetailViewController 类型,则不起作用,这意味着您需要在 IB 中分配类名,您可以提供帮助

print(type(of:segue.destination))

对于导航,请执行

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

最新更新