Class 不同类中的访问变量-Swift

Class 不同类中的访问变量-Swift,class,methods,swift,Class,Methods,Swift,我有两份swift文件: main.swift和view.swift 在main.swift中,我有一个变量(Int)最初设置为0 使用iAction我将变量设置为10,一切正常 但是,如果我尝试从view.swift访问该变量,通过像main().getValue()这样的简单调用,我总是得到0而不是10,即使该变量在main.swift中更改了它的值 main.swift中的方法getValue()如下所示: func getValue() -> Int { return variab

我有两份swift文件:

main.swift
view.swift

在main.swift中,我有一个
变量(Int)
最初设置为
0

使用
iAction
我将
变量设置为
10
,一切正常

但是,如果我尝试从view.swift访问该
变量,通过像
main().getValue()
这样的简单调用,我总是得到
0
而不是
10
,即使该变量在main.swift中更改了它的值

main.swift中的方法
getValue()
如下所示:

func getValue() -> Int {
return variable
}

编辑

下面是代码(翻译自意大利语:D)


提前谢谢
阿尔贝托

Swift中的“文件”和“类”之间有一个重要的区别。文件与类没有任何关系。您可以在一个文件中定义1000个类,或在1000个文件中定义1个类(使用扩展名)。数据保存在类的实例中,而不是文件本身

现在来谈谈问题。通过调用
Main()。这就是该值显示为默认值的原因

您需要做的是找到一种方法来获取与Xib中实例相同的引用。如果不了解你的应用程序的架构,我很难提出这样做的建议


一个想法是,您可以使用
视图中的IBOutlet向Xib中的
Main
实例添加引用。然后您可以简单地执行self.main.getValue()
,它将在正确的实例上被调用。

我通过创建一个可供所有视图访问的通用主类解决了这个问题。创建一个空swift文件,将其命名为“global.swift”,并将其包含在项目中:

global.swift:

现在,您可以从所有视图控制器访问此mainInstance,并且名称将始终为“我的全局类”。来自viewController的示例:

视图控制器:


我们需要了解变量是如何定义的。它是在类还是结构中定义的?您试图如何访问另一个文件中的值?它是在类中定义的。我正试图通过键入
main()
来访问另一个类中的变量,只需键入main().getValue(),您正在创建一个
main
类的新实例,该类的默认值为
variable
到目前为止,您告诉我们的内容中有很多未知数。首先,文件在swift中并不重要。这都是关于类/结构和实例的。
main
是您的类的名称吗(通常类是大写的)?另外,您是否正在使用
Xib
文件?对我来说,使用
iAction
和一个名为
main
的类是很奇怪的。通常它是UIKit或Cocoa视图或控制器类的子类。是的,我们需要看到更多代码:)这里没有足够的代码,这正是我需要的。谢谢非常感谢。6个月来我一直在思考这个问题(我的整个swift职业生涯…),现在我已经学会了如何存储全局变量,可以访问、设置和获取,并且可以在任何地方修改。。。!!!!啊,谢谢你!!!这似乎是一个很好的答案,但作为程序员,我们的目标之一不是避免使用全局变量吗?非常感谢!!!!省去了我在使用结构、NSUserDefaults、类实例等方面的麻烦!非常感谢。为我节省了这么多时间和挫折:P
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
    }
}
class Main {
  var name:String
  init(name:String) {
    self.name = name
  }
}
var mainInstance = Main(name:"My Global Class")
override func viewDidLoad() {
        super.viewDidLoad()
        println("global class is " + mainInstance.name)
    }