Необязательная цепочка, используемая в левой части назначения в 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"