gpt4 book ai didi

swift - 如何声明具有两种可能类型的变量

转载 作者:行者123 更新时间:2023-11-28 14:02:20 25 4
gpt4 key购买 nike

我有两个 Core Data 实体,它们填充了一个包含 2 个部分的 UITableView,每个部分一个实体。当用户点击表格行时,他们将被定向到另一个 View ,该行的数据将被发送到该 View 。目前是这样实现的:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "editValue") {
let secondViewController = segue.destination as! EditValuesViewController

if send_array_inc.isEmpty {
secondViewController.send_array_exp = send_array_exp
} else if send_array_exp.isEmpty {
secondViewController.send_array_inc = send_array_inc
}
}
}

问题:

因为有两个实体,所以发送到下一个 View 的数据有两种可能的类型(收入支出)。如何在下一个 View 中使用一个变量使用该数据?我在 ViewDidLoad 中执行以下操作,但 send_array 的范围仍在该函数内。如何使 send_array 在外部可用?

if send_array_inc.isEmpty {
var send_array = [Expenses]()
send_array = send_array_exp
} else if send_array_exp.isEmpty {
var send_array = [Income]()
send_array = send_array_inc
}

理想情况下,我希望在不为每个实体创建单独的 View 结果的情况下执行此操作,但如果另一个解决方案更好、更现实,我愿意重构。谢谢

最佳答案

使您的两种类型的数据对象符合共享协议(protocol)。使目标 View Controller 的 send_array 成为符合该协议(protocol)的对象。

在您的 EditValuesViewController 代码中,查询 send_array 以确定传入的数据对象类型。

编辑:

定义协议(protocol)

@protocol dataArrayProtocol {
var dataArray: Array
}

定义 2 个符合该协议(protocol)的结构

struct ExpensesArrayStruct: dataArrayProtocol {
var dataArray: [Expenses]
}

struct IncomeArrayStruct: dataArrayProtocol {
var dataArray: [Income]
}

为您的 EditValuesViewController 提供一个符合该协议(protocol)的属性 类 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 编辑器中敲出了这段代码,并没有尝试编译它。我可能犯了一些小错误。不过,它应该会给您灵感。

关于swift - 如何声明具有两种可能类型的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53448053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com