Он уничтожил мое представление о статических переменных и константах после использования 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
Вы можете иметь как свойство экземпляра, так и свойство type (class/static) с тем же именем. –