Если этот блок нужно передать между несколькими viewControllers, у вас есть несколько вариантов:
1 - Передать замыкание как переменную: создать переменную для каждого нового ViewController в середине VC-A, VC-C и передать их между
, например:
//View Controller B:
var block:(((String) -> ()))? = nil
//Pass from A-B
if let viewcontrollerB = XXXX { //instantiate ViewController B from A
viewcontrollerB.block = self.block
}
//ViewController C:
var block:(((String) -> ()))? = nil
//Pass from B-C
if let viewcontrollerC = XXXX { //instantiate ViewController C from B
viewcontrollerC.block = self.block
}
//Call the block from ViewController C
if let block = self.block {
block("block data to pass")
}
2-Pass через Центр уведомлений Вы можете передать этот блок из любого контроллера представления в любой другой:
//send notification:
let notification = Notification(name: Notification.Name("pass block"), object: block, userInfo: nil)
NotificationCenter.default.post(notification)
3-Доступ из общего объекта. Используйте одноэлементный дизайн, создайте статический общий объект и считывайте / записывайте в объект из разных контроллеров представления
//AppDelegate:
static var block:(((String) -> ()))? = nil
//ViewController A:
AppDelegate.block = XXX
//ViewController C:
if let block = AppDelegate.block {
block("block data to pass")
}