Можешь объяснить назначение и функциональность наблюдателей свойств в Swift, включая различия между блоками `willSet` и `didSet`? — ДейлиПреп