arrays swift append didset

arrays - Usando didSet y private(set) en Swift Array



append (3)

  1. Pregunta 1 Sí, porque las llamadas a funciones mutantes cambian el valor almacenado, por lo tanto, privado (conjunto) prohíbe las llamadas a funciones mutantes.
  2. Pregunta 2 Sí, por la misma razón, los observadores se activan.

No hay nada específico para las matrices aquí, esto es una consecuencia de que las matrices sean estructuras y se append como un miembro mutante. Llamar al append es muy similar a afectar un nuevo valor a la propiedad. Esto no es muy explícito, pero hay más información en el documento para la mutación de miembros y propiedades almacenadas que respalda el hecho de que la mutación es manejada adecuadamente por el idioma.

Estoy trabajando en un proyecto veloz y tengo un par de arreglos. En uno de mis arreglos, no quiero que el cliente pueda mutarlo sin usar uno de mis métodos especialmente definidos. Por otro lado, quiero que el captador sea accesible. Mis preguntas surgen con respecto a añadir y establecer propiedades.

Pregunta 1 : ¿ private(set) impide que los clientes array.append a array.append ?

En otra matriz quiero ver si se ha cambiado.

Pregunta 2 : Si agrego un observador de propiedades a la matriz usando didSet , ¿se llama didSet cuando se agrega un elemento a la matriz?


Las respuestas a sus preguntas son fáciles de entender cuando se da cuenta de que los arreglos en Swift se pasan efectivamente por valor. Digo con eficacia porque se comportan como si se copiaran cuando se pasan, pero hay algo de magia inteligente bajo el capó para optimizar las cosas y evitar la duplicación de elementos innecesarios.

El controlador didSet se llama cuando cambia el valor de una propiedad, que en Swift incluye matrices. Por lo tanto, append() a una matriz en Swift es en realidad análogo a un += en un entero: primero se lee la matriz, luego se crea una nueva matriz con el valor agregado, y luego esa nueva matriz se vuelve a escribir en la propiedad. Así que puedes ver que definitivamente llamará a didSet si llamas a append() en una propiedad de matriz, y de manera similar, al hacer que el set privado, los usuarios externos no podrán llamar a append() ya que no podrán escribir el nuevo valor de nuevo a la matriz.


Pregunta 1: ¿Private (set) impide que los clientes llamen a array.append?

Si lo hace

Pregunta 2: Si agrego un observador de propiedades a la matriz utilizando didSet , ¿se llama cuando se agrega un elemento a la matriz?

Sí, se llama a didSet cuando se llama a append() en él.