Swift:为什么非静态方法不能在没有dynamicType的情况下调用静态变量和常量(静态let)?

时间:2016-04-11 08:53:53

标签: swift swift2 constants static-members dynamictype

在使用swift之后,它破坏了我对静态变量和常量的看法。

为什么swift不允许我们在其他方法中调用静态变量和常量?

例如:

class Aa {
    static let name = "Aario"
    func echo() {
        print(name)      // Error!
    } 
}

先生。 ogres告诉我使用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!!!

与其他语言完全不同。

0 个答案:

没有答案