2015-02-11 16 views
11

Non ho idea se questo sia possibile, ma mi salverà da un sacco di stress e codice errato. È possibile monitorare ogni volta che un array viene aggiornato? Ad esempio, il metodo A modifica l'array a=[1,2,3] a a=[1,2,3,4], è possibile avere una sorta di delegato che viene attivato quando viene aggiornato a?Monitorare le modifiche su un oggetto array

+0

Perché non implementare il proprio protocollo osservabile e rendere gli array in questione è conforme a quello? –

+0

In alternativa, crea un oggetto wrapper che, quando aggiorna la matrice, richiama un doChangeArray() o lancia un bool pubblico che puoi controllare. –

+0

È ora di andare a letto qui. Lo fornirò domani (a meno che qualcun altro non si presenti con una buona idea) –

risposta

20

Se la matrice è una proprietà della classe, è possibile utilizzare osservatori di proprietà. willSet viene chiamato prima della modifica, didSet viene chiamato dopo. È veramente facile

var myArray:[Int] = [1, 3, 4] { 
    didSet { 
     println("arrayChanged") 
    } 
} 

Questo stamperà serie cambiato se aggiungo un int, rimuovere e Int, ecc io in genere messo su una linea però:

var myArray:[Int] = [1, 3, 4] { didSet { println("arrayChanged") } } 
+0

Esattamente quello che stavo cercando, grazie. –

+0

Grazie, è stato molto utile –

+6

C'è un modo per monitorare le modifiche degli array interni? Come myArray.append (x)? –

Problemi correlati