所以我知道swift数组是struct
,所以它们是按值传递的
这是我的代码:firstSnapshotList
和secondSnapshotList
都是[Snapshot]
if datePicker == firstDatePicker {
firstSnapshotList.removeAll()
if let snapshots = SnapshotList.snapshotDict[dateKey] {
for snapshot in snapshots {
firstSnapshotList.append(snapshot)
}
}
} else if datePicker == secondDatePicker {
secondSnapshotList.removeAll()
if let snapshots = SnapshotList.snapshotDict[dateKey] {
for snapshot in snapshots {
secondSnapshotList.append(snapshot)
}
}
}
如您所见,如果
if
语句是相同的,则两个块都是相同的,除了正在修改的数组。我想先声明一个变量,
var snapshotList = *snapshot reference*
,然后,如果我可以根据日期选择器将引用设置为
firstSnapshotList
或secondSnapshotList
,那么我的代码就是if datePicker == firstDatePicker {
snapshotList = firstSnapshotList
} else if datePicker == secondDatePicker {
snapshotList = secondSnapshotList
}
snapshotList.removeAll()
if let snapshots = SnapshotList.snapshotDict[dateKey] {
for snapshot in snapshots {
snapshotList.append(snapshot)
}
}
你可以说行数是一样的,所以它实际上不再可读或可维护了——这只是我个人的喜好,我认为第二个版本更有意义,主要是因为没有任何重复的代码
但如果这只是快速生活方式的一部分,我也可以忍受。只是想知道是否可以将变量声明为引用
最佳答案
正如您所说,swift数组是结构,它们确实是作为值传递的。您可以将数组作为inout
参数传递给单独的方法:
func yourMethodName(_ array: inout [Snapshot]) {
array.removeAll()
if let snapshots = SnapshotList.snapshotDict[dateKey] {
for snapshot in snapshots {
array.append(snapshot)
}
}
}
然后在需要的地方调用方法,如下所示:
if datePicker == firstDatePicker {
yourMethodName(&firstSnapshotList)
} else if datePicker == secondDatePicker {
yourMethodName(&secondSnapshotList)
}
关于swift - 我可以通过引用声明局部Array变量,以减少重复代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51163699/