我有一个标签,其中绑定了一个实例中的变量。 当我更改变量时,我可以打印出新内容,但标签会保留原始内容。
class myClass: NSObject {
var text : String = "Initial"
override init() {
text = "Init"
}
func change() {
text = "Changed"
}
}
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
var instance = myClass()
func applicationDidFinishLaunching(aNotification: NSNotification) {
// Insert code here to initialize your application
instance.change()
print(instance.text)
}
func applicationWillTerminate(aNotification: NSNotification) {
// Insert code here to tear down your application
}
}
print(instance.text)给了我"更改"但标签保持" Init"。
为什么绑定在这种情况下不起作用?
该标签有一个" Bind to App Controller" " self.instance.text"结合
由于
答案 0 :(得分:1)
当Objective-C运行时导入Swift API时,不保证对属性,方法,下标或初始值设定项进行动态调度。 Swift编译器仍然可以虚拟化或内联成员访问,以优化代码的性能,绕过Objective-C运行时。
您可以使用dynamic修饰符要求通过Objective-C运行时动态调度对成员的访问。要求动态调度很少是必要的。但是,在使用像键值观察这样的API时,这是必要的。
绑定使用键值观察。将text
属性更改为dynamic var text : String
,将var instance
更改为dynamic var instance
。