2

看下面的代码(playground 准备好了)。

我无法从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]
4

2 回答 2

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]
    }
}
于 2016-03-09T21:45:42.957 回答
0

var unwrappedData在函数内部声明的是该函数tryAppend()的局部变量。

该行的结果窗格向您显示包含以下内容的输出:[0, 1, 2, 3]for unwrappedData

于 2016-03-09T22:01:06.547 回答