我想从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时,它将返回空数组。

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

那我在这里想念什么?这个程序是用Xcode 6.1 Beta编写的。

最佳答案

您在2个地方声明了labelArray:在方法内部和作为类的实例变量。这是两件截然不同的事情,因此对一项的更改不会影响另一项。实例变量并没有变空:它以这种方式开始,并且从未改变。

另外,init不返回任何内容(也不应该返回任何内容)。

关于ios - 在Swift的另一个函数中使用列表时,为什么列表会变为空?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26878227/

10-11 16:13