我经常发现自己处于viewcontroller中有属性的情况,其值会影响viewcontroller视图的一部分。
举个例子,让我们说布尔属性标志决定是否应该隐藏视图 flagView 。
现在,可以在 flagView 加载之前或之后设置标记。
如果我在加载flagView后设置了标志,那么为标志实现 didSet 并设置 .hidden 属性是有意义的。 flagView ,但如果在 flagView 加载之前设置标记,则会中断。
您可以使用 isViewLoaded 来避免这种情况,但是您还必须在viewControllers viewDidLoad 方法中设置 flagView .hidden。< / p>
我想避免在两个不同的地方设置 .hidden 属性,是否有任何良好的做法/模式?
插图代码:
var flag = false {
didSet {
if isViewLoaded() {
flagView.hidden = flag
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
flagView.hidden = flag
}
答案 0 :(得分:0)
您可以在flag
中将viewDidLoad
属性设置为自身,以触发didSet
完成其工作。斯威夫特显然没有考虑副作用,并试图阻止你做这个“无操作”任务,但你可以通过设置来解决这个问题:
flag = (flag) // trigger didSet
这会将您的操作代码保存在didSet
内,并且不会遗漏viewDidLoad
的详细信息。如果didSet
比一行更复杂,则尤其如此。
var flag = false {
didSet {
if isViewLoaded() {
flagView.hidden = flag
// do additional actions when flag is set ...
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
flag = (flag) // trigger didSet
}