我想从 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 时,它返回空数组。
为什么初始化后数组变空了?正如我所写的,我在自定义类的第一行中保留了带有 var labelArray = [UILabel]() 的 labelArray。另请注意,我没有将其声明为 weak var - 它只是 var 声明。
那么我在这里缺少什么?这个应用程序是用 Xcode 6.1 Beta 编写的。
请您参考如下方法:
您在 2 个地方声明了 labelArray:在方法内部和作为类的实例变量。这是两个截然不同的事物,因此对其中一个的更改不会影响另一个。实例变量并没有变成为空:它一开始就是这样,而且从未改变过。
另外,init 没有返回任何东西(而且它不应该返回)。
