2015-07-01 3 views
0

Это код для приложения, чтобы сделать список Я пытаюсь создать:'UILabel?' не имеет элемент с именем «текст»

import UIKit 

class MyTableViewController: UITableViewController { 

var ToDoItems = ["Buy Groceries", "Pickup Laundry", "Wash Car", "Return Library Books", "Complete Assignment"] 

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cellIdentifier = "ToDoCell" 
    let cell = tableView.dequeueReusableCellWithIdentifier("cellIdentifier", forIndexPath: indexPath) as UITableViewCell 

    // Configure the cell... 
    cell.textLabel.text = ToDoItems[indexPath.row] //This is where the issue is 

    return cell 
} 
+1

Это не поможет просто добавить код шаблонного вопрос. Единственный метод, который имеет ваш код в нем, является последним. Другие методы вносят свой вклад в вопрос. – zaph

+0

Как указывали другие, проблема заключается в том, что 'UILabel?' Является необязательным (как указано '?'). К счастью, Xcode 6.4 заменил это плохо сформулированное сообщение об ошибке чем-то более понятным: «значение необязательного типа« UILabel »? не разворачивается, вы хотели использовать '!' или '?'?". Возможно, вам стоит рассмотреть возможность обновления до Xcode 6.4. – Rob

ответ

3

безопасный способ сделать это с дополнительным обязательным:

if let label = cell.textLabel { 
    label.text = ToDoItems[indexPath.row] 
} 

Или вы можете использовать дополнительные цепочки:

cell.textLabel?.text = ToDoItems[indexPath.row] 
+0

Почему первый вариант лучше, чем тот же самый более короткий вариант? –

+0

В ответе выше сначала была развернута сила, но затем она была отредактирована, чтобы быть необязательной цепочкой. Я имел в виду это. Оба метода, которые я написал, одинаково безопасны. –

+0

Уверен, что они оба безопасны. Есть много других вариантов, чтобы написать одно и то же разворачивание и сделать его безопасным. Например, вы можете использовать switch и .Some и .Empty :))) –

2

Вам нужно разворачивать этикетку от Опционно перед использованием его.

cell.textLabel?.text = ToDoItems[indexPath.row] 
Смежные вопросы