当在Swift中的另一个函数中使用列表时,为什么列表变空?

时间:2014-11-12 02:27:37

标签: ios swift initialization

我想从UITableViewCell创建一个子类,其中包含以下代码:

var labelArray = [UILabel]()

convenience init(style: UITableViewCellStyle, reuseIdentifier: String, column: Int, array: [Int]) {
    var cell = UITableViewCell(style: style, reuseIdentifier: reuseIdentifier)
    self.init()

    let left_padding = 0

    var labelArray = [UILabel]()
    // populate the labelArray
    println(labelArray) // print the populated Array
}

初始化看起来像是成功的,labelArray打印出正确的内容。

但是,当我尝试在另一个函数中使用填充的labelArray时,例如:

func changeLabelWithString(string: String, index: Int) {
    var label = labelArray[index]
    label.text = string
}

这传递了编译但是遇到了运行时错误,因为labelArray[index]收到错误:fatal error: Cannot index empty buffer

因此,当我尝试从函数中检出labelArray时,它会返回空数组。

为什么数组在初始化后变空?正如我所写,我在自定义类的第一行保留labelArray var labelArray = [UILabel]()。另请注意,我没有将其声明为weak var - 它只是var声明。

那我在这里错过了什么?这个应用程序是用Xcode 6.1 Beta编写的。

1 个答案:

答案 0 :(得分:3)

您在2个地方声明了labelArray:在方法内部并作为类的实例变量。这些是两个不同的东西,因此改变为一个不会影响另一个。实例变量变为为空:它以这种方式开始并且从未改变过。

此外,init没有返回任何内容(并且不应该返回)。