¿Qué significan las opciones nuevas e iniciales en el método addObserver a continuación?

Supongamos que estamos agregando un observador para “volumen”.

El .new es “cuando se llama la devolución de llamada del observador, dígale el nuevo volumen (¡lo cambiaron a 10!)”

El .initial es “cuando se llama a addObserver, incluso antes de devolver la llamada al observador callback (con lo que digan las otras opciones)”

El .new significa que su devolución de llamada no tiene que tomarse la molestia de averiguar el nuevo valor (y .old significa “también proporcionar el valor anterior”, que a veces puede ser útil). Si cualquiera que sea su devolución de llamada iba a buscar el valor de todos modos, o no le importaba cuál era el valor, entonces .new es un desperdicio de ciclos de CPU y memoria.

El .initial es útil si desea hacer algo como “poner un medidor de volumen en la pantalla”, sin él necesita escribir código para actualizar el medidor de volumen cuando cambie, y también asegurarse de obtener el valor inicial allí. Con .initial se llama a su código “cambiado!”, Y siempre lo tendrá manejado. Si su código no está realmente listo para recibir cambios de estado hasta “más tarde”, entonces .initial no será bueno para usted (y también, probablemente llamó a addObserver demasiado pronto).

(el observador es, de hecho, “jugador”, lo que se observa es player.currentItem: desea consultar Foundation | Apple Developer Documentation)

Editar : al responder comentarios, pensé que esto podría ser útil aquí:

Sin .nuevo, y sin .prior recibes una llamada como “¡Hey! ¡La cosa cambió!

Con .new recibes una llamada como “¡Hey! ¡La cosa cambió! ¡Ahora es 30%!

Con .new y .prior recibe una llamada como “¡Hey! ¡La cosa cambió! ¡Ahora es 30%, solía ser 25%! ”

Ni .new ni .prior cambian cuántas veces o cuándo se llama la devolución de llamada. Con .initial recibe una llamada, recibe una llamada “de inmediato”, y con o sin ella recibe una llamada cada vez que cambia el valor (es decir, con .prior recibe una llamada más y luego sin ella).