访问变量在不同的类 - Swift

时间:2014-06-20 18:02:10

标签: class methods swift

我有两个快速文件:

main.swiftview.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
    }
}

提前致谢 阿尔贝托

2 个答案:

答案 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(),它将在正确的实例上调用。

相关问题