2015-07-20 6 views

ответ

2

Короткий ответ: для экономии ресурсов. Свойство textLabel является необязательным, чтобы позволить UILabel инициализироваться лениво. Другими словами, свойство остается равным нулю, если вы на самом деле не пытаетесь получить к нему доступ.

Вы можете проверить это в отладчике, рассматривая экземпляр вашего UITableViewCell:

let cell = dequeueReusableCellWithIdentifier(MyCell.cellIdentifier, forIndexPath: indexPath) as! MyCell 

// check cell.textLabel here in the debugger. should be nil. 

cell.textLabel.text = "test" // creates textLabel via lazy initialization 
+0

Я куплю это. Икс – ybakos

1

Хотя он не задокументирован должным образом, он следует тем же правилам - должен быть установлен правильный стиль. То есть, если вы используете пользовательские ячейки, обычно настраиваемые с помощью конструктора интерфейса, пользовательская ячейка инициализируется - и в этом случае в ячейку не добавляется ни один из представлений по умолчанию, потому что это будет расточительно.

Если вы используете какой-либо другой стиль, чем пользовательская ячейка, он всегда будет инициализирован с первой меткой, поэтому вы можете использовать его без забот (но определение, очевидно, не может измениться в этом случае, поэтому оно будет всегда объявлено как необязательное).

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