我试图在我的班级ChooserListVC中为" list"
添加一个属性观察者这些是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
时,它会触发正确的行?
答案 0 :(得分: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?
答案 1 :(得分: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)