在Swift中访问全局变量

时间:2016-04-26 07:28:17

标签: swift

鉴于此示例Swift代码:

var a = 10;

func foo() -> Int {
    var a = 20;
    return a;
}

函数foo如何访问值为10的全局变量a而不是值为20的本地a?

请注意,a和foo都不是在类中声明,而是在通用模块中声明。我正在寻找一种方法来告诉Swift访问全局定义的var而不是本地定义的var。

3 个答案:

答案 0 :(得分:5)

我在控制台应用程序Xcode中创建了一个项目,目标是这里的一个模块。 所以我将项目命名为test,并且目标具有相同的名称,因此在项目中模块本身也具有名称test。任何全局定义都将隐含对test.的调用。就像全局Swift函数一样隐含了对Swift.的调用,如Swift.print("...")

var a = 10;

func foo() -> Int {
    let a = 20;
    Swift.print(test.a) // same as print(test.a)

    return a;
}

test.foo() // same as foo()

输出是:

  

10

所以你必须在变量之前添加模块名称以获取全局变量而不是本地变量。

答案 1 :(得分:2)

使用self关键字:

func foo() -> Int {
    var a = 20;
    return self.a;
}

答案 2 :(得分:2)

 func foo(bar:Any) -> Int {
        let a = 20
        if bar is Bar {
            let c = bar as? Bar
            return c!.a
        }
        return a
  }