簡體   English   中英

Swift與對象的屬性觀察器

[英]Property Observer for Swift with Objects

我試圖在我的類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 ,以便每次我在其他代碼位中更改list.chooserItems時,都會觸發正確的行?

最簡單的解決方案是將要觀察的屬性設置為私有,並創建可公開使用的方法來操作數組。

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

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

如果您需要真正的觀察,我建議您查看此答案。Swift中是否提供鍵值觀察(KVO)?

我沒有找到想要的方式,但是找到了另一種方式。 我在正在實施的課程中添加了通知。 然后,我只是添加了一個偵聽器來觸發我需要的事件。

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM