使用委托和协议模式发送数据时意外发现 nil

Unexpectedly found nil when sending data with Delegates and protocols pattern

我有 2 个视图控制器,firstVC 和 secondVC。
我想从第一个发送数据来更新 secondVC 的变量和 UI。
当在 didSelectRowAt 中点击它时,我想用委托发送 tableView 的 indexPath.row。
This is what I try, but when selecting a row the app crashes with error:
Unexpectedly found nil while implicitly unwrapping an Optional value
我尝试调试并看到委托为 nil,即使我放置了一个使委托成为 firstVC 的方法。
第二VC:

func setupDelegate() {
        let FirstVC = storyboard?.instantiateViewController(identifier: "FirstVC") as! FirstVC
        FirstVC.selectionDelegate = self
    }
    
}

extension SecondVC: setSelectionDelegate {
    //this is never executed
    func didChoose(index: Int) {
        lbl.text = String(index)
    }
}

第一VC:

protocol setSelectionDelegate {
    func didChoose(index: Int)
}

var selectionDelegate: setSelectionDelegate!

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
     let secondVC = UIStoryboard.init(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "secondVC") as? secondVC
     secondVC?.setupDelegate()
     self.selectionDelegate.didChoose(index: indexPath.row)
}

每次您显式调用 instantiateViewController 时,您都会得到一个 new 视图控制器实例,这与您在 device/simulator.

使用故事板转场(嵌入或模态呈现...),您有 override prepare(...) 函数来获取对所需视图控制器实例的引用。