Skip to main content
 首页 » 操作系统

ios之为什么列表在 Swift 的另一个函数中使用时会变空

2024年01月01日40jackei

我想从 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 没有返回任何东西(而且它不应该返回)。