无法指定类型的值' UIColor'键入' String?'

时间:2016-05-10 17:31:29

标签: ios swift

我正在使用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!

你们知道发生了什么吗?

2 个答案:

答案 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
}

现在很容易发现!是否属于您的代码。它......没有。

不要相信任何建议在代码中添加额外崩溃运算符以解决问题的人。它只是成为更多问题的根源。