iOS - MVP, как связать родительского ведущего с дочерним ведущим? - PullRequest
0 голосов
/ 07 июня 2018

Ситуация:

  1. У меня есть родительское представление, в котором есть презентатор и дочернее представление с другим связанным презентатором.
  2. Служба предоставляет модель родительскому презентатору, но эта модель имеетдля передачи также дочернему докладчику.
  3. Я не хочу использовать Уведомление, все общение между службой и докладчиком будет осуществляться делегатами.

Я сейчас подключаюсьоба докладчика с помощью представлений, если родительский докладчик должен сообщить что-то ребенку, он вызывает метод child, и если дочерний элемент должен что-то сообщить родителю (т. е. кнопка нажата), child использует делегата (я пытаюсьподражать тому, что делает swift с таблицами).Я использую этот способ для разделения обоих докладчиков.

Мне нужно знать, если эта процедура неправильная, и, если она неправильная, почему.

Заранее спасибо:)

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

В целом ваша идея, описанная в вопросе, хороша.Я бы предложил использовать блоки кода в качестве обратных вызовов вместо делегатов, реализованных с помощью протоколов.

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

Этот подход лучше в области изоляции кода.Родитель знает о ребенке, насколько он управляет им, но ребенок ничего не знает о родителе.Также не требуется никакого дополнительного кода вне этой функциональности (например, протоколы и т. Д.).

0 голосов
/ 07 июня 2018

Я бы сосредоточился на протоколно-ориентированном программировании.Сделайте так, чтобы родитель и ребенок соответствовали их собственному протоколу.При инициации ребенка вы можете ввести зависимость от родителя.Родитель может содержать ссылку на ребенка.Поскольку оба соответствуют протоколам, вы будете знать, какие методы у них есть в открытом доступе.Это также значительно облегчает процесс написания тестов, поскольку вы можете отправить имитацию дочернему элементу, который соответствует тому же протоколу, который, в свою очередь, вы можете использовать для проверки поведения кодов.

Только помните, что не следует делать какие-либо сильные ссылки друг на друга, иначе вы окажетесь в цикле сохранения.

...