Q: Делегирование протокола Всем привет! Только начал работать с протоколами, поэтому появился вот такой вопрос. 
Есть два ViewController'a. С первого нужно передать данные на второй без помощи segue. Я создаю свой протокол 
protocol MainTableViewControllerDelegate {  
func workerInfo(worker: Worker)  
}

Потом в этом же VC указываю следующее:
var delegate: MainTableViewControllerDelegate?

Отправляю данные:
let addTask = UITableViewRowAction(style: .default, title: "Добавить задачу") { (action, indexPath) in  


// Отправление данных на AddTaskViewController  

        let sendWorker = self.workerArray[indexPath.row]  
        self.delegate?.workerInfo(worker: sendWorker)  
        print("Отправил \(sendWorker.fullName!)")  
        let vc = self.storyboard?.instantiateViewController(withIdentifier: "addTaskVC")  
        self.navigationController?.pushViewController(vc!, animated: true)  
}

Во втором VC подписываюсь под протокол и реализую его метод: 
func workerInfo(worker: Worker) {  
    self.aWorker = worker  
}  

В итоге с первого VC данные передаются, а на второй в переменную aWorker приходит nil :(
Что я делаю не так?:(

A: А чем не устраивает segue и зачем все усложнять?
Если все же так хочется - нужно правильно понять это дело. К тому же, в таком сценарии незачем протоколы использовать.
Просто укажи
        let vc = self.storyboard?.instantiateViewController(withIdentifier: "addTaskVC") as! Secondvc  
vc.aWorker = sendWorker


A: Привет! Не особо понятен вопрос, отвечу на то как понял.
Есть 2 контроллера А и B, если мне нужно передать некоторые данные из А в B - например по нажатии на ячейку, это можно сделать добавив в контроллере B переменную:
   class B { //addTaskVC
      var worker: Worker?
   }

И вот здесь где:
    let addTask = UITableViewRowAction(style: .default, title: "Добавить задачу") { (action, indexPath) in 
        let sendWorker = self.workerArray[indexPath.row]  
        let vc = self.storyboard?.instantiateViewController(withIdentifier: "addTaskVC")  
        vc.worker = sendWorker // мы устанавливаем значение этой переменной 
        self.navigationController?.pushViewController(vc!, animated: true)  
    }

В обратную сторону: из В в А - здесь да, как вариант можно использовать делегирование.
Для этого в В нужно добавить делегат:
   class B { //addTaskVC
      var worker: Worker?
      weak var delegate: MainTableViewControllerDelegate?
   }

И его уже нужно будет реализовать в контроллере А.
