Property Observer для Swift с объектами

Я пытаюсь добавить наблюдателя свойства в моем классе ChooserListVC для "списка"

Это переменные в 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")
        }
    }
}

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

2 ответа

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

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

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

Если вам нужно реальное наблюдение, я бы посоветовал проверить этот ответ. Доступно ли наблюдение в ключе (KVO) в Swift?

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

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)
Другие вопросы по тегам