我是快速语言的新手。迅捷提供了新的面向对象的特征属性观察者" willSet"并且" didSet"。它与常见的目标C属性如何不同。
答案 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)
}
}