iOS - MVP如何与儿童演示者沟通父节目主持人?

时间:2018-06-07 13:18:46

标签: ios swift mvp

情况:

  1. 我有一个父视图,其中包含一个演示者和一个带有另一个相关演示者的子视图。
  2. 服务将模型提供给父演示者,但此模型也必须转移到子演示者。
  3. 我不想使用通知,服务和演示者之间的所有通信都将由代表完成。
  4. 我目前正在通过视图链接两位演示者,如果父节目主持人需要向孩子传达某种东西,它会调用一种孩子的方法,如果孩子需要向父母传达某种东西(即按下按钮),孩子会使用一个委托(我试图模仿swift对表格的影响)。我正在使用这种方式来分隔两位演示者。

    我需要知道这个程序是否错误,如果错了,为什么。

    提前致谢:)

2 个答案:

答案 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)
}

这种方法在代码隔离范围方面更好。父母知道孩子的管理权,但孩子对父母一无所知。此功能之外也不需要任何其他代码(如协议等......)。