Вы неправильно поняли примечание к выпуску и значение изменения языка.
, почему Apple решила сделать необязательный необязательный тип
Они не сделали«т.Вы можете и, как правило, по-прежнему говорите
unowned let owner : MyViewController
Единственное изменение здесь заключается в том, что неизвестная переменная может быть необязательной, что ранее было недопустимым.Это изменение заботится о досадном крайнем случае, вот и все.
Выше не соответствует действительности
Да, это так.Вещи совершенно не изменились:
- Слабые ссылки должны быть напечатаны как Необязательные;они не сохраняют указанный объект, но отслеживают указанный объект и возвращаются к
nil
, если этот объект исчезает. - Неизвестные ссылки не сохраняют упомянутый объект и не отслеживают упомянутый объект, поэтому вы должны не допустить того, чтобы этот объект исчез, или вы можете получить висящий указатель и сбой.
Единственное, что изменилось, это то, что раньше существовало дополнительное правило, согласно которому неизвестный ссылочный тип не мог быть необязательным.Это правило больше не применяется.
Как вы правильно заметили, если неподходящий тип ссылки является необязательным, это должна быть ссылка var
, а не ссылка let
(посколькуналичие этого параметра необязательно, если бы у вас не было возможности изменить его с nil
на фактическое значение и наоборот).
Типичный вариант использования очень похож на то, что вы самипри условии:
class Node {
unowned var parent: Node?
}
Представляется разумным сказать, что этот узел может иметь или не иметь родителя (потому что он может быть в верхней части графика), но если он делает иметь родителя, этот родитель должен быть неизвестным (родитель должен сохранить своего ребенка, но ребенок не должен сохранять своего родителя).Раньше единственный способ сказать это состоял в том, чтобы сделать это слабой ссылкой, что влечет за собой некоторые ненужные издержки и является бесполезным, потому что мы можем абсолютно гарантировать, что если у узла есть родительский элемент, родительский объект переживет дочерний элемент.Теперь вы можете сказать, что вы имеете в виду, что, как правило, хорошо.