情况:
我目前正在通过视图链接两位演示者,如果父节目主持人需要向孩子传达某种东西,它会调用一种孩子的方法,如果孩子需要向父母传达某种东西(即按下按钮),孩子会使用一个委托(我试图模仿swift对表格的影响)。我正在使用这种方式来分隔两位演示者。
我需要知道这个程序是否错误,如果错了,为什么。
提前致谢:)
答案 0 :(得分:3)
我将专注于面向协议的编程。使父母和孩子都遵守自己的协议。启动子进程时,您可以依赖注入父进程。父母可以持有对孩子的引用。由于两者都符合协议,因此您将了解它们公开可用的方法。这使得在编写测试时也更容易,因为您可以将模拟结果发送给符合相同协议的子项,而后者又可以用来验证代码行为。
请记住,不要互相强烈引用,否则你最终会陷入保留期。
答案 1 :(得分:0)
总体而言,您在问题中描述的想法很好。我建议使用代码块作为回调而不是通过协议实现的委托。
class ChildView {
var onButtonTapped: ((someData: String) -> Void)?
@IBAction func buttonapped(_ sender: Any) {
self.onButtonTapped?("data from child view")
}
}
// in parent view code space:
childView.onButtonTapped = { [weak self] data in
self?.updateStuff(data)
}
这种方法在代码隔离范围方面更好。父母知道孩子的管理权,但孩子对父母一无所知。此功能之外也不需要任何其他代码(如协议等......)。