我对 Swift 还很陌生,所以要温和...
我有一个名为 ProgramOptions 的类,如下所示:
class ProgramOptions {
var startDate: Date = Date()
var trackedActivities = [TrackedItem]()
var trackedFoods = [TrackedItem]()
var trackedDrugs = [TrackedItem]()
...
}
TrackedItem 是我的另一个类。
在 TableViewController 的代码中,我想根据所讨论的表格部分从 ProgramOptions 的实例中选择一个数组。然后我想做很多可能的事情,比如删除或添加项目、编辑它们等。
作为一个 Swift 初学者,我天真地写了这个函数:
func trackedArrayForSection(_ section: Int) -> [TrackedItem]? {
switch(section) {
case 1: return programOptions.trackedActivities
case 2: return programOptions.trackedFoods
case 3: return programOptions.trackedDrugs
default: return nil
}
}
(第 0 节和第 > 3 节没有关联的数组,所以我返回 nil)
但残酷的现实让我痛苦。我猜数组是一个副本。 (或者我对 StackOverflow 上类似问题的薄弱理解表明它被有时 复制了。)
所以这是要问你的问题......我如何编写我的 trackedArrayForSection 以便我获得对位于 ProgramOptions 中的实际数组的引用,然后我可以从中添加和删除项目?
当然,我可以在每个使用它的地方都有一个 switch 语句,但是它们有将近无数个,我想避免这种情况。我假设对此有一个简单的答案,但我在这一点上太无知了。
感谢您的帮助!
最佳答案
我会将您的开关逻辑提取到您的类的实例方法中:
class ProgramOptions {
var startDate: Date = Date()
private var trackedActivities = [TrackedItem]()
private var trackedFoods = [TrackedItem]()
private var trackedDrugs = [TrackedItem]()
func trackedItems(forSection section: Int) -> [TrackedItem]? {
switch section {
case 1: return self.trackedActivities
case 2: return self.trackedFoods
case 3: return self.trackedDrugs
default: return nil
}
}
func add(trackedActivity activity: TrackItem){
self.trackedActivities.append(activity)
}
}
然后在您的 View 中您只需重新加载表格。
关于arrays - 返回数组引用的 Swift 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44055890/