鉴于此示例银行代码:访问全局变量斯威夫特
var a = 10;
func foo() -> Int {
var a = 20;
return a;
}
如何函数foo可以访问全局变量值为10,而不是与值20的一个地方?
请注意,a和foo都不是在类中声明的,而是在通用模块中声明的。我正在寻找一种方法来告诉Swift访问全局定义的变量,而不是本地定义的变量。
鉴于此示例银行代码:访问全局变量斯威夫特
var a = 10;
func foo() -> Int {
var a = 20;
return a;
}
如何函数foo可以访问全局变量值为10,而不是与值20的一个地方?
请注意,a和foo都不是在类中声明的,而是在通用模块中声明的。我正在寻找一种方法来告诉Swift访问全局定义的变量,而不是本地定义的变量。
我在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()
输出是:
所以,你必须在变量之前添加模块名称,以获得全球性的,而不是当地的一个掩盖它。
使用self
关键字:
func foo() -> Int {
var a = 20;
return self.a;
}
foo不是定义成类的方法,它是一个函数,所以self不可用。 – Marco
如果var a = 10,该怎么办?是不是在同一班?您将不会遇到任何成员错误。 – 2016-04-26 07:37:51
func foo(bar:Any) -> Int {
let a = 20
if bar is Bar {
let c = bar as? Bar
return c!.a
}
return a
}
你应该做'如果让c =吧?酒吧'而不是强制铸造。 – EmilioPelaez
var a和function foo没有在类中声明,而是在模块中声明。 – Marco
什么是模块命名?我认为你可以通过调用'Module.a'来完成,但还没有尝试过。 https://www.reddit.com/r/swift/comments/3xd560/scoperesolution_operator/ –
此外,@Marco,你可以编辑你的问题,包括你在评论中提供的信息?我认为大多数Swift开发人员会认为我们在没有任何信息的情况下在课堂上工作。 –