如何处理公共视图修改viewcontroller属性?

时间:2016-05-10 08:20:17

标签: ios uiviewcontroller

我经常发现自己处于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
}

1 个答案:

答案 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
}