diziye

2014-11-20 25 views
8

kaldırıldı/bildirim alın ben bir eleman bir diziden eklendi/kaldırıldı size bildirilmesi istedi. Bir bir öğe kaldırmak eklemek/zamandiziye

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

biz de benzer bir sonuca ulaşmak Can,: Biz diziler bahsetmiyoruz Bir dize değiştiğinde örnek bildirilmesini için, Swift iyi bir çözüm yoktur dizi?

cevap

4

Derse/sahnelerin altında standart diziyi depolar, dizinin aynı arayüze sahip olacak ve mağaza dizinin adına hareket edecektir yapı gibi vekil oluşturabilirsiniz. İşte küçük bir örnek:

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

Bu iyi bir çözüm olduğunu - elle benzer şekilde sarılmış sürece ancak dikkate alınması tüm diğer dizi yöntemleri (harita gibi, sıralama, vb) ve özellikleri mevcut değildir olmalıdır – Antonio

+1

@Antonio Evet ama temel diziye erişmek kolay sanırım. 'A.array = a.array.map {...}' – Kirsteins

+0

Evet sadece Bunun gerçek bir 'Array' olmadığını işaret etmek istedik, ve o * değil * bir' Array' (eğer geçemez yani böyle bir dizinin bir örneğini beklemek fonksiyonlarına). Benimki bir eleştiri değil - sadece bir açıklama. Fikir güzel, ama tabii ki o subclassing Yani yorgun tüm durumlarda – Antonio