UIKit+Storyboard下如何通过双层协议委托实现ThirdVC向FirstVC传值?
UIKit委托链实现ThirdVC到FirstVC的数据传递
你的代码思路方向正确,但存在几个关键问题导致数据无法正常传递,以下是修正后的完整实现方案:
核心问题梳理
- 委托属性未用
weak修饰,易引发循环引用 - FirstVC中存在冗余的
delegate属性 - ThirdVC调用委托方法时使用了未定义的变量
- 委托方法调用时机错误,需在页面跳转前完成数据传递
修正后的完整代码
// 给协议添加类约束,支持weak委托修饰 protocol FirstCall: AnyObject { func firstFunction(makerData: String, featuresData: [String]) } class FirstVC: UIViewController, FirstCall { @IBAction func buttonClicked(_ sender: Any) { guard let secondVC = storyboard?.instantiateViewController(identifier: "SecondVC") as? SecondVC else { return } secondVC.delegate = self navigationController?.pushViewController(secondVC, animated: true) } // 实现协议方法,接收并处理传递来的数据 func firstFunction(makerData: String, featuresData: [String]) { print("厂商数据:\(makerData)") print("特性列表:\(featuresData)") } } protocol SecondCall: AnyObject { func secondFunction(makerData: String, featuresData: [String]) } class SecondVC: UIViewController, SecondCall { // weak修饰委托,避免循环引用 weak var delegate: FirstCall? @IBAction func buttonClicked(_ sender: Any){ guard let thirdVC = storyboard?.instantiateViewController(identifier: "ThirdVC") as? ThirdVC else { return } thirdVC.delegate = self navigationController?.pushViewController(thirdVC, animated: true) } // 实现协议方法,将数据转发给FirstVC func secondFunction(makerData: String, featuresData: [String]) { delegate?.firstFunction(makerData: makerData, featuresData: featuresData) } } class ThirdVC: UIViewController { weak var delegate: SecondCall? // 定义要传递的实际数据(可根据业务逻辑动态赋值) private let makerData = "Apple" private let featuresData = ["Face ID", "A17 Pro", "USB-C"] @IBAction func buttonClicked(_ sender: Any) { // 先传递数据,再执行页面跳转 delegate?.secondFunction(makerData: makerData, featuresData: featuresData) navigationController?.popToRootViewController(animated: true) } }
关键修改说明
- 给协议添加
AnyObject约束,确保委托属性能用weak修饰,避免VC间循环引用 - 移除FirstVC中冗余的
delegate属性,FirstVC本身是协议实现者,无需持有自身委托引用 - 在ThirdVC中定义实际要传递的数据变量,保证调用委托方法时传入有效数据
- 调整ThirdVC方法调用顺序:先通过委托链传递数据,再执行页面跳转,确保数据在页面销毁前完成传递
内容的提问来源于stack exchange,提问作者Ayaan Khan
相关产品推荐
相关产品推荐

