我正在使用this Swift教程,并惊讶地看到在let cell
方法中使用tableView:cellForRowAtIndexPath
(见下文)。教程作者提供的解释是
Use let instead of var whenever you know the value won't change
但是,对于每个不同的单元格,下面的代码中cell
的值是否会发生变化,特别是如果旧的单元格没有出列,那么变量是否更合适呢?
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell
let object = objects[indexPath.row] as Alarm
cell.textLabel.text = object.title
return cell
}
您能否澄清为什么常量适合该代码以及value
cell
的{{1}}没有变化。
答案 0 :(得分:2)
cell
会发生什么变化,但是,您必须查看范围。对于该方法的每次迭代,都会重新定义cell
常量。也就是说,创建,返回一个新的常量,并且本地常量的范围就会离开,所以当下一次调用该方法并再次定义cell
时,它就是一个新的常量我们正在处理。
经验法则是始终使用let
,除非你绝对不能。这有助于防止您意外修改您不想修改的变种。
如果要在方法之外定义单元格,然后使用:
cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell
然后肯定会出现问题,因为你正在重新定义一个常量。