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)