2016-05-10 5 views
0

Я строю боковую панель с Swift. И я получил эту ошибку в этом коде:Нельзя присвоить значение типа 'UIColor' для ввода 'String?'

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!

Вы знаете, что происходит?

+1

Какое сообщение об ошибке? –

+0

@JeffPuckettII В названии? – Hamish

ответ

1

ошибка происходит из-за этот код:

cell!.textLabel!.text = UIColor.darkTextColor() 

Вы назначаете UIColor свойству, ожидающий быть String (text свойством UILabel).

Я думаю, что вы, вероятно, хотите изменить text color, если так вам нужно изменить код, как:

cell!.textLabel!.textColor = UIColor.darkTextColor() 
+0

Я новичок в Xcode, так что я должен писать вместо этого? –

+0

Последней строкой ответа является то, что вы должны написать вместо этого – dan

+0

Большое вам спасибо! –

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 
} 

Теперь это легко определить, принадлежит ли ! в вашем коде или нет. Это ... нет.

Не доверяйте никому, кто рекомендует добавлять дополнительные коды к вашему коду, чтобы решить ваши проблемы. Это просто становится источником больших проблем.

Смежные вопросы