main.swift
和view.swift
在main.swift中我的variable (Int)
初始设置为0
。
使用IBACtion
我将variable
设置为10
,一切正常。
但是,如果我尝试从 view.swift 访问variable
,只需使用main().getValue()
之类的简单调用,我就会始终0
而不是{{ 1}}即使变量在main.swift中改变了它的值。
main.swift 中的方法10
如下所示:
getValue()
修改
这是代码(翻译自意大利语:D)
func getValue() -> Int {
return variable
}
import Cocoa
class Main: NSObject {
var variable: Int = 0
func getValue() -> Int {
return variable
}
@IBAction func updateVar(sender: AnyObject!) {
variable = 10
}
}
提前致谢 阿尔贝托
答案 0 :(得分:38)
我通过创建一个可供所有视图访问的通用主类来解决这个问题。创建一个空的swift文件,将其命名为“global.swift”并将其包含在您的项目中:
global.swift:
class Main {
var name:String
init(name:String) {
self.name = name
}
}
var mainInstance = Main(name:"My Global Class")
您现在可以从所有视图控制器访问此mainInstance,名称将始终为“我的全局类”。 viewController中的示例:
的viewController:
override func viewDidLoad() {
super.viewDidLoad()
println("global class is " + mainInstance.name)
}
答案 1 :(得分:17)
Swift和“classes”中的“文件”之间存在重要区别。文件与类没有任何关系。您可以在一个文件中定义1000个类,在1000个文件中定义1个类(使用扩展名)。数据保存在类的实例中,而不是文件本身。
所以现在问题。通过调用Main()
,您将创建Main
类的全新实例,该类与您连接到Xib文件的实例无关。这就是默认值出现的原因。
您需要做的是找到一种方法来获取与
有人想到,您可以使用Main
中的IBOutlet在Xib中添加对View
实例的引用。然后你可以简单地做self.main.getValue()
,它将在正确的实例上调用。