Это специально, чтобы наблюдатели свойств не вызывались в инициализаторах.Рассмотрим код ниже;программа будет аварийно завершена, если этот struct
будет создан в качестве экземпляра.Это потому, что наблюдатели получают доступ к другим свойствам, прежде чем они были установлены.Из-за этого было решено не запускать наблюдателей из инициализаторов.
struct Struct {
var p1: Int { didSet { p2 = p3 * 2 } }
var p2: Int { didSet { p1 = p3 / 2 } }
var p3: Int
init(_ p1: Int, _ p2: Int, _ p3: Int) {
self.p1 = p1 // The program crashes at this point, because `p3` was not yet set.
self.p2 = p2
self.p3 = p3
}
}
Чтобы обойти это, вы можете создать функцию, которую вы вызываете как из наблюдателей, так и из инициализатора, или вы можете посмотреть это .