我在编程方面非常陌生,并且很难理解这两个属性观察者。
我目前正在构建一个带有表格视图的应用程序,其中日期选择器包含在它的行中。在本例中,我有两个日期选择器。众所周知,日期选择器在单元格中占据很大的高度,因此您需要隐藏它们。下面的代码可以处理它:
var isCheckInDatePickerShown: Bool = false {
didSet{
checkInDatePicker.isHidden = !isCheckInDatePickerShown
}
}
var isCheckOutDatePickerShown: Bool = false {
didSet{
checkOutDatePicker.isHidden = !isCheckOutDatePickerShown
}
}
Run Code Online (Sandbox Code Playgroud)
我有非常基本的编程知识,所以我对didSet. a 会发生什么willSet?
正如苹果公司所描述的:
您可以选择在属性上定义其中一个或两个观察者:
willSet 在存储值之前被调用。
didSet 在新值存储后立即调用。
因此,基本上,在 willSet 中执行的代码在运行时将无法访问变量的 newValue,而 didSet 将可以访问它(因为它是“设置后”)。
为了 :
var isCheckInDatePickerShown: Bool = false {
willSet{
print("This new value is: \(isCheckInDatePickerShown)")
}
}
var isCheckOutDatePickerShown: Bool = false {
didSet{
print("This new value after it was set is: \(isCheckOutDatePickerShown)")
}
}
Run Code Online (Sandbox Code Playgroud)
如果你打电话给他们:
print(isCheckInDatePickerShown)
.isCheckInDatePickerShown = true
print(isCheckInDatePickerShown)
Run Code Online (Sandbox Code Playgroud)
将打印:
错误的
“这个新值是:假”
真的
print(isCheckOutDatePickerShown)
.isCheckOutDatePickerShown = true
print(isCheckOutDatePickerShown)
Run Code Online (Sandbox Code Playgroud)
将打印:
错误的
“设置后的新值为:true”
真的
正如您所看到的,willSet 中运行的代码尚未访问新值,因为它尚未提交到内存中。而 didSet 确实可以访问它。
| 归档时间: |
|
| 查看次数: |
3792 次 |
| 最近记录: |