2016-04-14 86 views
1

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

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”。

为什么绑定在这种情况下不起作用?

该标签具有“绑定到应用控制器”“self.instance.text”结合

由于

+0

你为什么从AppDelegate中调用它? – Laffen

+0

我需要稍后与AppDelegate中的对象进行通信。从ViewController调用显示相同的问题 –

+0

您是否正在编辑UIViewController中的变量? – Laffen

回答

1

当夫特API是由Objective-C运行进口时,不存在的保证属性,方法,下标或初始化程序的动态分派。 Swift编译器仍然可以使用虚拟化或内联成员访问来优化代码的性能,绕过Objective-C运行时。

您可以使用动态修饰符来要求通过Objective-C运行时动态分配对成员的访问。很少需要动态调度。但是,在使用API​​(如键值观察)时,这是必要的。

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