gpt4 book ai didi

swift - 覆盖 isHighlighted 仍然会改变 UIControlState - 为什么?

转载 作者:行者123 更新时间:2023-11-28 11:51:44 25 4
gpt4 key购买 nike

UIControl 中,如果我重写 isHighlighted 以设置私有(private) _isHighlighted 属性,然后检查控件的 state 看看它是否包含 .highlighted,状态仍然准确地反射(reflect)了变化。请参阅下面的代码。

我的问题是,这怎么可能?我从不调用 super.isHighlighted 或操作状态属性。 state 是一个 OptionSet ,它必须将 .highlighted 属性插入到集合中,据我所知,它没有,或者应该不,如果我覆盖该属性,就会发生这种情况。

我能想到的唯一其他解释是 state 实际上是一个基于其他属性(即 isSelectedisEnabled、等等)

class MyControl: UIControl {

private var _isHighlighted: Bool = false

override var isHighlighted: Bool {
get { return self._isHighlighted }
set { self._isHighlighted = newValue }
}

}


let myControl = MyControl()
myControl.isHighlighted = true
myControl.state.contains(.highlighted) // returns true

最佳答案

The only other explanation I can think of is that state is actually a computed property based off other properties (i.e. isSelected, isEnabled, etc.)

很好的解释!让我们尝试在 getter 中记录(打印)以查看是否属实:

class MyControl: UIControl {
private var _isHighlighted: Bool = false
override var isHighlighted: Bool {
get { print("getting"); return self._isHighlighted }
set { self._isHighlighted = newValue }
}
}
let myControl = MyControl()
myControl.isHighlighted = true
print("about to check state")
myControl.state.contains(.highlighted)
print("checked state")

这是日志:

about to check state
getting
checked state

Quod erat demonstrandum.

关于swift - 覆盖 isHighlighted 仍然会改变 UIControlState - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51828207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com