Как использовать функций других контроллеров?

Для использования функций других контроллеров в Swift, вам понадобится создать экземпляр этого контроллера и вызвать его функцию. Вот несколько способов, которые можно использовать в зависимости от ваших потребностей.

1. С использованием performSegue()
Если вы хотите вызвать функцию из другого контроллера при переходе на него, вы можете использовать метод performSegue(withIdentifier:sender:). Для начала убедитесь, что у вас есть идентификатор перехода, который указывает на другой контроллер. Затем используйте этот идентификатор в методе performSegue(withIdentifier:sender:), чтобы выполнить переход. После этого у вас будет возможность получить экземпляр контроллера назначения и вызвать его функцию. Например:

// В методе, вызывающем переход на другой контроллер 
performSegue(withIdentifier: "segueIdentifier", sender: nil)

// В методе prepare(for segue: UIStoryboardSegue, sender: Any?), вызываемом перед переходом
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "segueIdentifier" {
        if let destinationVC = segue.destination as? OtherViewController {
            destinationVC.someFunction()
        }
    }
}

2. С использованием делегатов
Delегаты позволяют общаться между разными контроллерами посредством протокола. Вы можете определить протокол в одном контроллере, а затем сделать другой контроллер его делегатом. Когда нужно вызвать метод из другого контроллера, контроллер делегата может вызвать этот метод. Например:

// Протокол с функцией, которую нужно вызвать из другого контроллера
protocol OtherControllerDelegate: class {
    func someFunction()
}

// Контроллер, который будет являться делегатом
class FirstController: UIViewController, OtherControllerDelegate {
    func someFunction() {
        print("Function called from other controller")
    }
}

// Контроллер, который будет вызывать функцию делегата
class OtherController: UIViewController {
    weak var delegate: OtherControllerDelegate?
    
    func callFunction() {
        delegate?.someFunction()
    }
}

// В коде, где создается экземпляр OtherController
let otherController = OtherController()
let firstController = FirstController()
otherController.delegate = firstController
otherController.callFunction()

3. Использование NotificationCenter
NotificationCenter позволяет отправлять и получать уведомления в приложении. Если вам нужно вызывать функцию из другого контроллера без явной ссылки на него, вы можете использовать NotificationCenter для отправки и прослушивания уведомлений. Например:

// В контроллере, который вызывает функцию
 NotificationCenter.default.post(name: Notification.Name("MyNotification"), object: nil)

// В контроллере, который должен вызывать функцию
 NotificationCenter.default.addObserver(forName: Notification.Name("MyNotification"), object: nil, queue: nil) { notification in
     someFunction()
 }

Все эти подходы имеют свои преимущества и недостатки, поэтому выбор зависит от вашей конкретной ситуации.