我正在使用Swift构建补充工具栏。 我在这段代码中遇到了这个错误:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell:UITableViewCell! = tableView.dequeueReusableCellWithIdentifier("cell")! as UITableViewCell
if cell == nil{
cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "Cell")
cell!.backgroundColor = UIColor.clearColor()
cell!.textLabel!.text = UIColor.darkTextColor()
}
// Configure the cell...
return cell
}
所以这个平台上确实有人有同样的问题。在解决方案中,他们说我必须在!
后添加UIColor.darkTextColor()
,但如果我这样做,则还有另一个错误,我必须删除!
错误出现在以下行:
细胞!.textLabel!
你们知道发生了什么吗?
答案 0 :(得分:1)
错误是由于此代码:
cell!.textLabel!.text = UIColor.darkTextColor()
您要将UIColor
分配给期望为String
UILabel
cell!.textLabel!.textColor = UIColor.darkTextColor()
属性的属性。
我认为您可能希望更改text,如果需要,您需要更改代码:
{{1}}
答案 1 :(得分:0)
问题是您是否正在尝试将UIColor
分配给String
。您希望使用单元格textColor
上的textLabel
属性,如下所示:
cell.textLabel?.textColor = UIColor.darkTextColor()
另请注意,您有一个可重复使用的单元格标识符不匹配("Cell"
用于新创建的,"cell"
用于获取它们。)
然而,这里有更大的问题。
你真的不应该在crash operators(!
)乱扔垃圾,以免驳回编译错误。当然,它可能是完全安全的。现在(当你进行== nil
检查时) - 但它只是鼓励将来在他们真正不应该使用的地方使用它们。对于未来的代码重构,它们也可能非常危险。
我建议您重新编写代码以利用nil-coalescing运算符(??
)。您可以使用它来尝试获得可重复使用的单元格。如果失败,那么您可以替换新创建的那个。您还可以使用自动执行闭包({...}()
)来进行常规单元设置。
例如:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
// attempt to get a reusable cell – create one otherwise
let cell = tableView.dequeueReusableCellWithIdentifier("foo") ?? {
// create new cell
let cell = UITableViewCell(style: .Default, reuseIdentifier: "foo")
// do setup for common properties
cell.backgroundColor = UIColor.redColor()
cell.selectionStyle = .None
// assign the newly created cell to the cell property in the parent scope
return cell
}()
// do setup for individual cells
if indexPath.row % 2 == 0 {
cell.textLabel?.text = "foo"
cell.textLabel?.textColor = UIColor.blueColor()
} else {
cell.textLabel?.text = "bar"
cell.textLabel?.textColor = UIColor.greenColor()
}
return cell
}
现在很容易发现!
是否属于您的代码。它......没有。
不要相信任何建议在代码中添加额外崩溃运算符以解决问题的人。它只是成为更多问题的根源。