В целом ваша идея, описанная в вопросе, хороша.Я бы предложил использовать блоки кода в качестве обратных вызовов вместо делегатов, реализованных с помощью протоколов.
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)
}
Этот подход лучше в области изоляции кода.Родитель знает о ребенке, насколько он управляет им, но ребенок ничего не знает о родителе.Также не требуется никакого дополнительного кода вне этой функциональности (например, протоколы и т. Д.).