2014-11-20 10 views
8

Ich möchte benachrichtigt werden, wenn ein Element aus einem Array hinzugefügt/entfernt wird. Wenn wir nicht über Arrays sprechen, beispielsweise benachrichtigt werden, wenn ein String geändert wird, ist es eine gute Lösung in swift:Benachrichtigung erhalten, wenn Element zu Array hinzugefügt/entfernt wurde

private var privateWord: String? 
var word: String? { 
    get { 
     return privateWord 
    } 
    set { 
     if newValue != "" { 
      notifyThatWordIsChanged() 
     } else { 
      notifyThatWordIsEmpty() 
     } 
     privateWord = newValue 
    } 
} 

Können wir ein ähnliches Ergebnis achive, wenn ich hinzufügen/entfernen ein Element ein Array?

Antwort

4

Sie können Proxy wie Klasse/Struktur erstellen, die dieselbe Schnittstelle wie Array haben, wird Standard-Array unter den Szenen speichern und wird im Auftrag von Speicherarray handeln. Hier kleines Beispiel:

struct ArrayProxy<T> { 
    var array: [T] = [] 

    mutating func append(newElement: T) { 
     self.array.append(newElement) 
     print("Element added") 
    } 

    mutating func removeAtIndex(index: Int) { 
     print("Removed object \(self.array[index]) at index \(index)") 
     self.array.removeAtIndex(index) 
    } 

    subscript(index: Int) -> T { 
     set { 
      print("Set object from \(self.array[index]) to \(newValue) at index \(index)") 
      self.array[index] = newValue 
     } 
     get { 
      return self.array[index] 
     } 
    } 
} 

var a = ArrayProxy<Int>() 
a.append(1) 
+0

Dies ist eine gute Abhilfe - jedoch muss berücksichtigt werden, dass alle andere Array-Methoden (wie Karte, Art, etc.) und Eigenschaften sind nicht verfügbar, wenn manuell in ähnlicher Weise gewickelt – Antonio

+1

@Antonio Ja, aber ich denke, es ist einfach, darunterliegende Array zugreifen. 'a.array = a.array.map {...}' – Kirsteins

+0

Ja, ich wollte nur darauf hinweisen, dass es kein richtiges 'Array' ist, und es ist nicht * wie * ein' Array' (was bedeutet, dass du nicht bestehen kannst es zu Funktionen, die eine Instanz eines Arrays erwarten). Meins ist keine Kritik - nur eine Klarstellung. Die Idee ist gut, aber es ist natürlich keine Lösung für alle Fälle – Antonio

Verwandte Themen