我缺乏一些基本的理解。
今天我想把一些UIView子类化,然后我查看了UIButton定义,但我无法弄清楚它是如何工作的。
在UIButton定义中有以下属性:
open var adjustsImageWhenHighlighted: Bool
open var adjustsImageWhenDisabled: Bool
当使用UIButton时,UIButton的值设置时无关紧要,它总是以与tableView或任何其他UIKit类相同的正确方式配置。
我做了一个例子:
class customView: UIView {
var shouldSetupConstraints = true
var addAdditionalSpacing = true
var elements: [String]? {
didSet{
if addAdditionalSpacing == false {
doSomething()
}
}
}
func doSomething() {
}
override init(frame: CGRect) {
super.init(frame: frame)
setUpLayout()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override func updateConstraints() {
if(shouldSetupConstraints) {
// AutoLayout constraints
shouldSetupConstraints = false
}
super.updateConstraints()
}
func setUpLayout() {
}
}
使用CustomView:
lazy var customV: CustomView = {
let v = CustomView()
v.addAdditionalSpacing = true
v.elements = ["One","Two"]
return v
}()
lazy var customV2: CustomView = {
let v = CustomView()
v.elements = ["One","Two"]
v.addAdditionalSpacing = true
return v
}()
因此,如果我使用CustomView,它会对我设置的顺序产生影响,我理解为什么,但我不明白我必须以哪种方式设计我的类,以便我可以随时设置值,除了如果didSet配置不同。为什么UIButton中的属性没有任何setter,在这种情况下如何设置值?
任何指向文档的链接也会受到赞赏。
答案 0 :(得分:0)
首先,在UIButton中,您可以控制现有属性的didSet属性观察者,如下所示:
override var adjustsImageWhenDisabled: Bool {
didSet {
doStuff()
}
}
其次,在您的类场景中,您可以考虑在构造函数中传递参数:
init(shouldSetupConstraints: Bool = true, var addAdditionalSpacing = true)
这样,只要您需要,您就可以使用这些属性。
如果有帮助,请告诉我。