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

Rak*_*una 1 properties swift

我是快速语言的新手.迅捷提供了新的面向对象的特征属性观察者"willSet"和"didSet".它与常见的目标C属性有什么不同.

pbo*_*dsk 7

我使用属性观察器,更具体地didSet用于各种事物.

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

var persons: [Person]? = nil
Run Code Online (Sandbox Code Playgroud)

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

var persons: [Person]? = nil {
    didSet {
        tableView.reloadData()
    }
}
Run Code Online (Sandbox Code Playgroud)

另一个例子可能是@IBOutlets,如果你想设置文字颜色,字体,背景颜色等.通常你会在这样的viewDidLoad()地方或者某个地方这样做,但现在你也可以didSet这样做,如下:

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

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

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


Adr*_*ers 5

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

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

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