查看以下代码(准备好游乐场)。
我无法在if let
语句中向未包装的可选数组追加数据。
允许附加可选数组的最佳方法是什么?
class ValueTypeTest {
var data: [Int]?
func tryAppend() {
if var unwrappedData = self.data {
unwrappedData += [2, 3] // problem !
self.data! += [4, 5] // works
} else {
// Initialize paging and initial results
self.data = [0, 1]
}
}
}
var v = ValueTypeTest()
v.data // nil
v.tryAppend()
v.data // [0, 1]
v.tryAppend()
v.data // expected: [0, 1, 2, 3, 4, 5] actual: [0, 1, 4, 5]
答案 0 :(得分:1)
因为Array是值类型,并且在执行if var
操作时将被复制。因此,您不会更改self.data
,而是unwrappedData
。
试试这个:
self.data = (self.data ?? [0, 1]) + [2, 3, 4, 5]
这就是我的意思。
func tryAppend() {
if let unwrappedData = self.data {
self.data = unwrappedData + [2, 3, 4, 5]
} else {
// Initialize paging and initial results
self.data = [0, 1]
}
}
答案 1 :(得分:0)
var unwrappedData
中声明的 tryAppend()
是该函数的局部变量。
该行的结果窗格显示包含[0, 1, 2, 3]
的{{1}}的输出。