访问变量在不同的类 - Swift

Alb*_*ini 21 methods class swift

我有两个快速文件:

main.swiftview.swift

在main.swift中,我有一个variable (Int)初始设置为0.

随着IBACtion我设置variable10和一切正常.

但是,如果我尝试访问该variableview.swift,用一个简单的调用,比如main().getValue(),我总是得到0,而不是10即使变量已经改变了它在main.swift值.

该方法getValue()main.swift看起来是这样的:

func getValue() -> Int {
return variable
}
Run Code Online (Sandbox Code Playgroud)

编辑

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

import Cocoa

class Main: NSObject {

    var variable: Int = 0

    func getValue() -> Int {
        return variable
    }

    @IBAction func updateVar(sender: AnyObject!) {
        variable = 10
    }
}
Run Code Online (Sandbox Code Playgroud)
class View: NSView {
    override func drawRect(dirtyRect: NSRect) {
       println(Main().getValue()) //Returns always 0
    }
}
Run Code Online (Sandbox Code Playgroud)

在此先感谢Alberto

Kok*_*oko 38

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

global.swift:

class Main {
  var name:String
  init(name:String) {
    self.name = name
  }
}
var mainInstance = Main(name:"My Global Class")
Run Code Online (Sandbox Code Playgroud)

您现在可以从所有视图控制器访问此mainInstance,名称将始终为"我的全局类".viewController的示例:

的viewController:

override func viewDidLoad() {
        super.viewDidLoad()
        println("global class is " + mainInstance.name)
    }
Run Code Online (Sandbox Code Playgroud)

  • 这正是我所需要的.谢谢! (3认同)
  • 谢谢.我一直在想这个问题6个月(我的整个职业生涯......)我现在已经学会了如何将全局变量存储在可访问,可设置和可获取状态,并随时随地修改...... !!!! 啊,谢谢! (3认同)
  • 这似乎是一个很好的答案,但作为程序员不要使用全局变量,这不是我们的目标之一吗? (3认同)
  • 非常感谢你!!!! 使用结构,NSUserDefaults,类实例等等,省去了所有麻烦! (2认同)
  • 谢谢!救了我这么多时间和挫折:P (2认同)
  • OMG非常感谢你.你不知道我现在有多宽慰大声笑 (2认同)

dre*_*wag 17

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

所以现在问题.通过调用Main()要创建一个全新的实例中的Main有没有关系,你已经连上你的XIB文件的实例类.这就是价值作为默认值出现的原因.

您需要做的是找到一种方法来获取 Xib中的实例相同的实例的引用.在不了解应用程序的更多架构的情况下,我很难就此做出建议.

有人想到,你可以Main使用你的IBOutlet在你的Xib中添加对你的实例的引用View.然后你可以简单地做self.main.getValue(),它将在正确的实例上调用.