在Swift类中更改绑定变量

时间:2016-04-14 20:23:30

标签: swift cocoa cocoa-bindings

我有一个标签,其中绑定了一个实例中的变量。 当我更改变量时,我可以打印出新内容,但标签会保留原始内容。

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"结合

由于

1 个答案:

答案 0 :(得分:1)

  

当Objective-C运行时导入Swift API时,不保证对属性,方法,下标或初始值设定项进行动态调度。 Swift编译器仍然可以虚拟化或内联成员访问,以优化代码的性能,绕过Objective-C运行时。

     

您可以使用dynamic修饰符要求通过Objective-C运行时动态调度对成员的访问。要求动态调度很少是必要的。但是,在使用像键值观察这样的API时,这是必要的。

绑定使用键值观察。将text属性更改为dynamic var text : String,将var instance更改为dynamic var instance