¿Por qué no se llama a los observadores de propiedades willSet y didSet cuando se establece una propiedad durante la inicialización en Swift?

Probablemente para evitar la recursión en explosión. Similar a la respuesta del usuario de Quora. De manera similar, en un paradigma de IU es esencial permitir que un elemento de IU se inicialice sin desencadenar un efecto descendente. Si esto se hace con API especiales en el elemento UI [MFC le dice explícitamente, por ejemplo, si una API genera una interacción], o API especiales para bloquear la señalización [Qt].

De lo contrario, digamos, por ejemplo, que está inicializando el contenido de un cuadro combinado. Si tiene un controlador para la selección de elementos en ese cuadro combinado y su kit de herramientas de interfaz de usuario invoca ese controlador incluso cuando llama al método setItem, entonces tendrá un problema ya que su interfaz de usuario comenzará a reaccionar a su código, que no es lo que desea . Desea que su IU reaccione solo a las interacciones reales del usuario.

Creo que es porque did- y willSet pueden tener dependencias (por ejemplo, otras propiedades) que no se pueden usar hasta que se inicializan. El iniciador es donde sucede eso y debería poder inicializar las propiedades en cualquier orden. Sin embargo, si inicializa una propiedad que se basa en did- o willSet antes de inicializar cualquier dependencia, terminará con un error de tiempo de ejecución.

Por ejemplo, supongamos que cuando establece una propiedad desea que la pila CoreData guarde los cambios. Tiene una propiedad de contexto que se pasa a su objeto en el inicializador (no es una propiedad opcional). Debería poder establecer cualquier propiedad en el orden que desee dentro del inicializador. Sin embargo, si no configura el contexto primero, la configuración de su otra propiedad intentará llamar al contexto que aún no está configurado, causando un error de tiempo de ejecución. Usted está obligado a configurarlos en un orden específico, uno que el compilador no conoce y, por lo tanto, no puede captar.

Y eso derrota el propósito de los valores no opcionales en primer lugar.