Если вам нужно использовать глобальную переменную / метод в закрытии, поставьте self.
перед вашей переменной / методом
Так что вы можете заменить это
saleOrder = saleEdited
на
self.saleOrder = saleEdited
но похоже, что проблема тоже где-то еще.Вам просто нужно передать saleOrder из первого во второй ViewController, где вы его редактируете, а затем передать данные обратно в первый контроллер представления
Итак, сначала удалите ненужный код из ViewControllerData:
let funcReturnFromEdit = { (saleEdited : SaleOrder) -> () in
saleOrder = saleEdited // I can't do this.
}
иисправьте обработчик завершения в ViewControllerEdit
, замените
var funcReturn = { (SaleOrder) -> Void in {} }
на
var funcReturn : ((SaleOrder) -> ())?
и отредактируйте ваш метод endEditions, потому что funcReturn является необязательным
func endEditions() {
funcReturn?(saleOrderToEdit)
}
Теперь только в ваших ViewControllerDataисправить prepare
метод, чтобы установить, что должно быть сделано, когда пользователь вызывает funcReturn
из ViewControllerEdit
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "segueEditOrder" {
let editVc = segue.destination as! ViewControllerEdit
if let saleOrderToPass = saleOrder {
editVc.saleOrderToEdit = saleOrderToPass
editVc.funcReturn = { saleEdited in
self.saleOrder = saleEdited //This code is executed when you call funcReturn?(saleOrderToEdit) from ViewControllerEdit
}
}
}
}