Для передачи данных между двумя отдаленными ViewController в Swift есть несколько способов. Вот некоторые из них:
1. Использование делегирования (Delegation):
Делегирование - это паттерн проектирования, позволяющий одному объекту передавать действия или данные другому объекту. Чтобы использовать делегирование для передачи данных между двумя ViewController, вы должны создать протокол (protocol) в вашем первом ViewController.
protocol DataDelegate { func sendData(data: String) }
Затем вы должны добавить свойство делегата в ваш первый ViewController.
class FirstViewController: UIViewController { var delegate: DataDelegate? // ... }
Второй ViewController должен реализовать протокол DataDelegate.
class SecondViewController: UIViewController, DataDelegate { // ... func sendData(data: String) { // Обработка данных } }
Когда у вас будет экземпляр первого ViewController, вы можете назначить делегатом экземпляр второго ViewController.
let firstVC = FirstViewController() let secondVC = SecondViewController() firstVC.delegate = secondVC
Теперь, когда у вас есть связь между двумя ViewController, вы можете вызывать метод sendData у делегата (в первом ViewController), чтобы передать данные во второй ViewController.
delegate?.sendData(data: "Hello, World!")
2. Использование замыканий (Closures):
Замыкания - это анонимные функции, которые могут быть сохранены и переданы другим объектам. Чтобы использовать замыкания для передачи данных между двумя ViewController, вы должны добавить свойство замыкания в ваш первый ViewController.
class FirstViewController: UIViewController { var completionHandler: ((String) -> Void)? // ... }
Затем вы можете назначить вашему замыканию обработчик во втором ViewController, передав его вместе с данными.
class SecondViewController: UIViewController { // ... func sendDataToFirstViewController() { let firstVC = FirstViewController() firstVC.completionHandler = { data in // Обработка данных } firstVC.completionHandler?("Hello, World!") } }
Здесь мы вызываем замыкание, передавая ему данные "Hello, World!".
В результате, когда у вас будет экземпляр первого ViewController, вы сможете вызвать замыкание completionHandler, чтобы передать данные во второй ViewController.
completionHandler?("Hello, World!")
3. Использование NotificationCenter:
NotificationCenter позволяет отправлять уведомления о событиях в вашем приложении. Чтобы использовать NotificationCenter для передачи данных между двумя ViewController, вы должны определить уникальный идентификатор уведомления (notification identifier).
extension Notification.Name { static let dataNotification = Notification.Name("DataNotification") }
Затем вы можете отправить уведомление с данными из первого ViewController.
class FirstViewController: UIViewController { func sendDataToSecondViewController() { let data = "Hello, World!" NotificationCenter.default.post(name: .dataNotification, object: data) } }
Во втором ViewController вы можете добавить слушатель на уведомление и обработать данные.
class SecondViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() NotificationCenter.default.addObserver(self, selector: #selector(handleData(notification:)), name: .dataNotification, object: nil) } @objc func handleData(notification: Notification) { if let data = notification.object as? String { // Обработка данных } } }
Не забудьте удалить слушателя уведомления во втором ViewController при необходимости:
deinit { NotificationCenter.default.removeObserver(self) }
Это некоторые способы передачи данных между двумя отдаленными ViewController в Swift. Какой способ использовать, зависит от контекста вашего приложения и требований проекта.