【发布时间】:2017-10-30 12:44:39
【问题描述】:
我的财产观察员有问题,想了解更多关于 Swift 行为的信息。
我有以下使用回调的架构:
更高级别的等级
class MyFirstClass : NSScrollView {
var colorDidUpdate: (() -> ())?
var color = NSColor.black {
didSet {
colorDidUpdate?()
}
}
override init(frame frameRect: NSRect) {
super.init(frame: frameRect)
/* Some init */
var mySecondClass = MySecondClass(frame: frame)
colorDidUpdate = mySecondClass.enclosingViewDidUpdateColor
mySecondClass.color = color
documentView = mySecondClass
/* Some other init */
}
}
然后是第二类,它就像第一类和第三类之间的链接
class MySecondClass {
var viewColorDidUpdate: (() -> ())?
var color: NSColor?
var myThirdClass = MyThirdClass(frame: frame)
init(frame frameRect: NSRect) {
/* Some init */
viewColorDidUpdate = myThirdClass.updateColor
myThirdClass.color = color
/* Some other init */
}
func enclosingViewDidUpdateColor() {
viewStyleDidUpdate?()
}
}
最后是第三堂课。
class MyThirdClass {
var color: NSColor?
func draw(_ dirtyRect: NSRect) {
guard let color = color else { return }
// The color is black instead of green.
}
/* proerties and functions... */
func updateColor() {
functionThatWillTriggerTheDrawFunction() // Will trigger draw function
}
}
如果我为 MyClass 属性设置新颜色,例如
var myClass = MyClass()
myClass.color = .green
打印的颜色不是“绿色”,但仍然是黑色...
我认为当我们在 didSet 范围内时,变量已经设置了,我错了吗?
我应该使用其他模式吗?
【问题讨论】:
-
"
colorDidUpdateis aclosure used as a delegate",我认为对delegation存在误解... -
@AhmadF 抱歉,我打错字了,我的意思是“用作回调”
-
@Hamish 我更新了我的问题的代码
标签: swift properties observable