展开会为值类型

时间:2016-03-09 21:40:13

标签: swift optional unwrap

查看以下代码(准备好游乐场)。

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

2 个答案:

答案 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}}的输出。