在Swift语言中使用observer属性didSet和willSet有什么用?

时间:2016-09-02 12:09:55

标签: swift properties

我是快速语言的新手。迅捷提供了新的面向对象的特征属性观察者" willSet"并且" didSet"。它与常见的目标C属性如何不同。

2 个答案:

答案 0 :(得分:7)

我使用属性观察者和更具体的didSet来处理各种事情。

一个示例可能是UIViewController,其中您有一个UITableView和一个数组,其中包含您要填充表格视图的元素:

var persons: [Person]? = nil

现在,每次更改persons数组中的某些内容时,您都希望重新加载表格视图。

var persons: [Person]? = nil {
    didSet {
        tableView.reloadData()
    }
}

另一个例子可能是@IBOutlets,如果您想设置文字颜色,字体,背景颜色等。通常你会在viewDidLoad()或类似的地方执行此操作,但现在你也可以在didSet中执行此操作,如下所示:

    @IBOutlet weak var headerLabel: UILabel! {
        didSet {
            headerLabel.font = UIFont.systemFontOfSize(15)
            headerLabel.textColor = UIColor.blueColor()
            headerLabel.text = NSLocalizedString("logIn", comment: "")
        }
    }

现在,初始化headerLabel时,会设置这些属性。

希望能让您了解如何使用属性观察者:)

答案 1 :(得分:3)

主要用途是捕获和升级变量的旧值和新值。 willSet捕获即将设置属性,变量的newValue,并didSet捕获oldValue。

它们对于装置和拆卸非常方便......例如。

var fileHandle: FileHandle {
    willSet{
        otherClass.disableAccessTo(handle: newValue)
    }
    didSet{
        otherClass.enableAccessTo(handle: self.fileHandle)
        yetAnotherClass.archiveFile(handle: oldValue)
    }
}