2015-08-17 2 views
1

Я пытаюсь добавить свойство наблюдателя в моем классе ChooserListVC для «списка»недвижимости наблюдатель Swift с объектами

Эти переменные в ChooserSaves, что я хотел бы отслеживать.

class ChooserSaves: UIDocument { 
var savedListObject : SavedList? 
var listName : String = "" 
var chooserItems : [String] = [] 
} 

Я не уверен, как установить это в классе, в котором я его реализую.

class ChooserListVC: UIViewController, UITableViewDelegate, UITableViewDataSource,UITextFieldDelegate{ 
var list : ChooserSaves! 

Я пытался сделать что-то вроде этого:

var list : ChooserSaves!{ 
    didSet{ 
     if chooserItems.count > 0{ 
      println("didset greater than 1") 
     } 
     else{ 
      println("didset less than 1") 
     } 
    } 
} 

Но это работает только один раз, когда переход присваивает список. Как я могу сделать это так, чтобы каждый раз, когда я изменял list.chooserItems в других битах кода, это вызывало бы правильную линию?

ответ

1

Простейшим решением было бы установить вашу собственность, которую вы хотите наблюдать, на частную жизнь и создать общедоступные методы для управления вашим массивом.

... 
private var chooserItems: [String] = [] 
... 
func add(chooserItem: String){ 
    // your tracking logic here 

    // update your private array 
    self.chooserItems.append(chooserItem) 
    ... 
} 
... 

Если вам нужны реальные наблюдения, я хотел бы предложить, чтобы оформить этот ответ Is key-value observation (KVO) available in Swift?

+0

Спасибо за ответ, но не совсем то, что я искал, но поставил меня на отслеживать то, что я хотел выполнить – Stan

0

я не нашел его так, как я хотел, но я нашел другой способ сделать это. Я добавил уведомления в класс, который я выполнял. Затем я просто добавил слушателя, чтобы вызвать событие, в котором я нуждался.

class ChooserSaves: UIDocument { 
var savedListObject : SavedList? 
var listName : String = "" 
var chooserItems : [String] = []{ 
    didSet{ 
     if chooserItems.isEmpty{ 
      NSNotificationCenter.defaultCenter().postNotificationName(listEmpty, object: nil) 
     } 
     else{ 
      NSNotificationCenter.defaultCenter().postNotificationName(listNotEmpty, object: self) 
     } 
    } 
} 

и это, как добавил слушателя в классе я использовал объект.

NSNotificationCenter.defaultCenter().addObserver(self, selector: "deactivateControls", name: listEmpty, object: nil) 
NSNotificationCenter.defaultCenter().addObserver(self, selector: "activateControls", name: listNotEmpty, object: nil)