Взгляните на жизненный цикл UIViewController docs : ViewDidLoad вызывается только один раз.
Существует множество руководств о том, как это сделать, просто выполните быстрый поиск. Вам нужно будет обновить логи dataSource c, поскольку я добавил быстрый строковый массив, и у вас, скорее всего, будет что-то более сложное, но идея все та же.
Кстати, я использовал ваше соглашение об именах vc1 / vc2, но я надеюсь, что у вас есть более значимые имена для ваших контроллеров.
В вашем коде у вас неправильный делегат V C. Вот краткий пример того, как он должен выглядеть:
class VC1: UIViewController {
let textLabel = UILabel()
// whenever you're presenting the vc2
func presentVC2() {
var vc2 = VC2()
vc2.delegate = self
self.present(vc2, animated: true, completion: nil)
}
}
extension VC1: VC2Delegate {
func updateLabel(withText text: String) {
self.textLabel.text = text
}
}
protocol VC2Delegate: class {
func updateLabel(withText text: String)
}
class VC2: UIViewController {
weak var delegate: VC2Delegate?
let dataSource = ["string 1", "tring 2"]
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let string = dataSource[indexPath.row]
self.delegate?.updateLabel(withText: string)
dismiss(animated: true, completion: nil)
}
}