我学习KVC和约束力。目前,我正试图将NSTextField绑定到计算属性colorWallStr
。我已将滑块的值绑定到相应的颜色变量,并将标签的值绑定到计算属性。斯威夫特:可可绑定值的计算属性不起作用
然而,当我移动滑块标签的内容不会改变。
// Inside MainWindowController
dynamic var colorRed: CGFloat = 1.0
dynamic var colorGreen: CGFloat = 1.0
dynamic var colorBlue: CGFloat = 0.0
dynamic var colorWallStr: String {
get {
return "R: \(colorRed) G: \(colorGreen) B: \(colorBlue)"
}
}
当我直接粘合标签到颜色变量,它工作正常。
感谢@ vadian的答案。现在我可以使用属性didSet
更新标签来触发更新标签方法(参见下文)。
dynamic var colorBlue: CGFloat = 0.0 {
didSet {
updateLabel()
}
}
func updateLabel() {
colorWall = "R: \(colorRed) G: \(colorGreen) B: \(colorBlue)"
}
如果字符串插值使用不更新封闭的计算性等特性,那么为什么下面的代码片段不起作用?
dynamic var colorWall: String {
get {
let red = colorRed
let green = colorGreen
let blue = colorBlue
return "R: \(red) G: \(green) B: \(blue)"
}
}
我只是试过你的片段,但我还没有工作。感谢您的额外资源。 –
好吧,不知道是什么问题。在发布之前,我将它设置在一个小应用程序中,并且工作正常。我的代码与您问题中第一个代码块中的代码以及我的答案中的代码块完全相同。你应该看看''keyPathsForValues..''方法是通过在''return''语句中放置一个断点来调用的。当你的应用程序启动时,如果它已被正确定义,程序应暂停执行。 –
我刚刚重建了应用程序,它现在正在工作! –