📅  最后修改于: 2023-12-03 15:06:34.734000             🧑  作者: Mango
在 iOS 开发中,使用子控制器是很常见的。但是,有时子控制器需要将一些信息或事件传递给其父视图控制器。这时就需要使用委托或闭包等机制来实现。
委托模式是一种常用的 iOS 设计模式,可以让对象之间进行通信。在委托模式下,通常会定义一个协议(Protocol),子控制器实现这个协议,并将自己作为委托来向父视图控制器传递信息。以下是一个使用委托模式的例子:
protocol MyDelegate: class {
func didUpdateData(_ data: Any)
}
class ParentViewController: UIViewController {
weak var delegate: MyDelegate?
...
}
class ChildViewController: UIViewController {
var dataToUpdate: Any?
var delegate: MyDelegate?
...
func updateData() {
// 更新数据
delegate?.didUpdateData(dataToUpdate)
}
}
闭包是一种可以在函数内部定义的匿名函数,可以在子控制器中使用闭包来完成信息的传递。以下是一个使用闭包模式的例子:
class ChildViewController: UIViewController {
var dataToUpdate: Any?
var onUpdateData: ((_ data: Any) -> Void)?
...
func updateData() {
// 更新数据
onUpdateData?(dataToUpdate)
}
}
class ParentViewController: UIViewController {
...
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "childVC" {
let childVC = segue.destination as! ChildViewController
childVC.onUpdateData = { data in
// 处理更新数据
}
}
}
}
无论是使用委托模式还是闭包模式,都可以实现子控制器向父视图控制器传递信息或者事件。在实际项目中,需要根据具体情况选择最适合的方式来实现。