简单地说:我如何避免在下面的Swift代码中为每一行编写!
?我考虑了guard
,但UITableViewCell初始化 可以返回nil,但另一方面cellForRowAtIndexPath
必须返回非零,这似乎是矛盾本身。希望有一种短暂而甜蜜的方式。
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier(reuseIdentifier)
if cell == nil {
cell = UITableViewCell(style: .Default, reuseIdentifier: reuseIdentifier)
}
cell!.textLabel?.text = ...
cell!.textLabel?.textColor = ...
cell!.detailTextLabel?.textColor = ...
cell!.detailTextLabel?.textColor = ...
return cell!
}
答案 0 :(得分:5)
??
运算符理解如果rhs不是可选的,那么结果不是可选的:
let cell = tableView.dequeueReusableCellWithIdentifier(reuseIdentifier)
?? UITableViewCell(style: .Default, reuseIdentifier: reuseIdentifier)
cell.textLabel?.text = ... // No ! needed
更好的是,如果您注册了您的单元格标识符(在故事板中或使用registerNib
/ registerClass
方法),那么您可以使用更新的dequeueReusableCellWithIdentifier
形式返回一个可选的:
let cell = tableView.dequeueReusableCellWithIdentifier("repo", forIndexPath: indexPath)
cell.textLabel?.text = ... // No ! needed
答案 1 :(得分:2)
让我直接从UITableView公共API粘贴一些内容:
public func dequeueReusableCellWithIdentifier(identifier: String, forIndexPath indexPath: NSIndexPath) -> UITableViewCell
// newer dequeue method guarantees a cell is returned and resized properly, assuming identifier is registered
查看上面的方法,它保证返回正确的单元格,因此返回类型不是可选的,可以避免强行展开。
答案 2 :(得分:-1)
您也可以这样编码:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(reuseIdentifier)!
cell.textLabel?.text = ...
cell.textLabel?.textColor = ...
cell.detailTextLabel?.textColor = ...
cell.detailTextLabel?.textColor = ...
return cell
}