Необязательная цепочка, используемая в левой части назначения в Swift

Что это означает, когда в левой части оператора присваивания используется необязательная цепочка? Сбоит ли приложение, если необязательная переменная равна nil?

например

// cell is a UITableViewCell
cell.textLabel?.text = "Test"

4 ответа

Решение

Вроде как короткое замыкание && Оператор, который останавливается, когда достигает первого ложного значения, необязательное сцепление останавливается, когда оно достигает первого значения nil.

Так что в крайнем случае вроде container?.cell?.textLabel?.text = "foo", любой из контейнера, ячейки или textLabel может быть ноль. Если какой-либо из них, то это утверждение фактически бесполезно. Только если вся цепочка не равна нулю, присвоение произойдет.

Ради полноты в дополнение к ответу @gregheo:

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

Цитируется из "Выражения необязательной цепочки"

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

в ES12 вы можете сделать это с помощью логического нулевого присваивания

      cell.textLabel?.text ??= "Test"

поэтому присвоение произойдет только в том случае, если левое выражение не равно нулю.

это как если бы вы сделали

      if (cell.textLabel?.text) cell.textLabel.text = "Test"
Другие вопросы по тегам