我是快速语言的新手.迅捷提供了新的面向对象的特征属性观察者"willSet"和"didSet".它与常见的目标C属性有什么不同.
我使用属性观察器,更具体地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初始化时,会设置这些属性.
希望能让您了解如何使用属性观察者:)
主要用途是捕获和升级变量的旧值和新值。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)