2
使用swift後,它破壞了我對靜態變量和常量的看法。Swift:爲什麼非靜態方法不能調用靜態變量和常量(static let)而沒有dynamicType?
爲什麼swift不允許我們在其他方法中調用靜態變量和常量?
例如:
class Aa {
static let name = "Aario"
func echo() {
print(name) // Error!
}
}
食人魔先生告訴我使用dynamicType
。
class Aa {
static var name = "Aario"
func echo() {
print(self.dynamicType.name)
}
}
let a = Aa()
a.dynamicType.name = "Aario Ai"
a.echo() // it works!!!
它的工作原理!那麼爲什麼我應該使用dynamicType來調用靜態變量?
最後的答案是:
class Aa {
static var name = "Static Variable"
var name = "Member Variable"
func echo() {
print(self.dynamicType.name) // Static Variable
print(Aa.name) // Static Variable
print(name) // Member Variable
}
}
let a = Aa()
a.dynamicType.name = "Aario Ai"
Aa.name = "Static: Aario"
a.name = "Member: Aario"
a.echo() // it works!!!
它與其他語言真的不一樣。
use self.dynamictype.name – ogres
你說得對。你能告訴我爲什麼它和其他語言有很大不同嗎? – AarioAi
你可以同時擁有一個實例屬性和一個類型(class/static)屬性。 –