Вот пример, можете адаптировать под свои нужды
protocol YourDelegate: AnyObject {
func didSelectData(value: Int)
}
class VC2 {
let data = [1, 2, 3, 4, 5]
// Method using closure
var completion: ((Int) -> Void)?
// Method using delegate
weak var delegate: YourDelegate?
func select(index: Int) {
let value = data[index]
completion?(value)
delegate?.didSelectData(value: value)
}
}
class VC1: YourDelegate {
func didSelectData(value: Int) {
print("FROM DELEGATE: ", value)
}
func push(vc: VC2) {
vc.delegate = self
vc.completion = { print("FROM CLOSURE: ", $0) }
}
}
let vc1 = VC1()
let vc2 = VC2()
vc1.push(vc: vc2)
vc2.select(index: 3)