Вы можете использовать ШАБЛОН ДЕЛЕГАТА для передачи данных обратно:
Вот небольшая справка по делегатам между двумя контроллерами представления:
Шаг 1: Создайте протокол в UIViewController, который вы будете удалять / будет отправлять данные.
protocol FooTwoViewControllerDelegate:class {
func myVCDidFinish(_ controller: FooTwoViewController, text: String)
}
Step2: Объявите делегата в классе отправки (например, UIViewcontroller)
class FooTwoViewController: UIViewController {
weak var delegate: FooTwoViewControllerDelegate?
[snip...]
}
Step3: Используйте делегат в методе класса для отправки данных в метод получения, который является любым методом, который принимает протокол.
@IBAction func saveColor(_ sender: UIBarButtonItem) {
delegate?.myVCDidFinish(self, text: colorLabel.text) //assuming the delegate is assigned otherwise error
}
Шаг 4: Принять протокол в классе приема
class ViewController: UIViewController, FooTwoViewControllerDelegate {
Шаг 5: Реализовать метод делегата
func myVCDidFinish(_ controller: FooTwoViewController, text: String) {
colorLabel.text = "The Color is " + text
controller.navigationController.popViewController(animated: true)
}
Шаг 6: Установите делегата в prepareForSegue:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "mySegue" {
let vc = segue.destination as! FooTwoViewController
vc.colorString = colorLabel.text
vc.delegate = self
}
}
И это должно сработать. Это, конечно, всего лишь фрагменты кода, но они должны дать вам представление. Для подробного объяснения этого кода вы можете go перейти к моей записи в блоге здесь:
сегменты и делегаты
Если вам интересно, что происходит под капот с делегатом Я написал об этом здесь:
под капотом с делегатами
исходный ответ