Согласуйте два типа объектов данных с общим протоколом.Сделайте контроллер вида представления send_array
объектом, соответствующим этому протоколу.
В коде вашего EditValuesViewController запросите send_array
, чтобы выяснить, какой тип объекта данных был передан.
Редактировать:
Определить протокол
@protocol dataArrayProtocol {
var dataArray: Array
}
Определить 2 структуры, которые соответствуют этому протоколу
struct ExpensesArrayStruct: dataArrayProtocol {
var dataArray: [Expenses]
}
struct IncomeArrayStruct: dataArrayProtocol {
var dataArray: [Income]
}
дать вашему EditValuesViewController
свойство, соответствующее этому классу протоколаEditValuesViewController: UIViewController {var dataArrayStruct: dataArrayProtocol}
И ваш prepare(for:sender)
метод
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "editValue") {
let secondViewController = segue.destination as! EditValuesViewController
if send_array_inc.isEmpty {
secondViewController.dataArrayStruct = ExpensesArrayStruct(dataArray: send_array_exp)
} else if send_array_exp.isEmpty {
secondViewController.dataArrayStruct = IncomeArrayStruct(dataArray: send_array_inc)
}
}
}
И для обработки данных:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if let expensesStruct = dataArrayStruct as? ExpensesArrayStruct {
//deal with expenses array
} else if let incomeStruct = dataArrayStruct as? IncomeArrayStruct {
//deal with income array
}
}
Обратите внимание, что я ударил этоКод в редакторе SO и не пытался скомпилировать его.Возможно, я сделал несколько незначительных ошибок.Это должно дать вам идею.