鑑於此示例銀行代碼:訪問全局變量斯威夫特
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開發人員會認爲我們在沒有任何信息的情況下在課堂上工作。 –