我有两个快速文件:
main.swift 和 view.swift
main.swift
view.swift
在main.swift中, 我variable (Int)最初设置为0。
variable (Int)
0
将IBACtionI设置variable为10,一切正常。
IBACtion
variable
10
但是,如果我尝试通过 view 这样的简单调用variable从 view.swift进行 访问,则即使变量已更改,它也main().getValue()总是会获得0,10即使它在main.swift中也没有变化。
main().getValue()
该方法getValue()在 main.swift 如下所示:
getValue()
func getValue() -> Int { return variable }
编辑
这是代码(翻译成意大利语:D)
import Cocoa class Main: NSObject { var variable: Int = 0 func getValue() -> Int { return variable } @IBAction func updateVar(sender: AnyObject!) { variable = 10 } }
class View: NSView { override func drawRect(dirtyRect: NSRect) { println(Main().getValue()) //Returns always 0 } }
在此先感谢Alberto
Swift中的“文件”和“类”之间有一个重要的区别。文件与类无关。您可以在一个文件中定义1000个类别,也可以在1000个文件中定义1个类别(使用扩展名)。数据保存在类的 实例 中,而不保存在文件本身中。
所以现在要解决问题。通过调用,Main()您正在创建该类的全新 实例 ,Main该实例与您已连接到Xib文件的实例无关。这就是为什么该值是默认值。
Main()
Main
您需要做的是找到一种方法来引用与您的Xib中的实例 相同的 实例。在不了解您的应用程序体系结构的情况下,我很难提出建议。
一种想法是,您可以Main使用中的IBOutlet在Xib中添加对实例的引用View。然后,您可以简单地执行操作self.main.getValue(),它将在正确的实例上调用。
View
self.main.getValue()