1

我正在尝试在我的类 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其他代码位时都会触发正确的行?

4

2 回答 2

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?

于 2015-08-17T23:39:32.027 回答
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)
于 2015-08-21T00:43:38.677 回答