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

AarioAi

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

为什么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!!!

与其他语言确实不同。

即使使用这种类型的代码编写静态变量,也必须使用其类型来解决。请参见Swift编程语言(Swift 2.2)-属性(在“查询和设置类型属性”中):

与实例属性一样,查询类型属性并使用点语法对其进行设置。但是,查询类型属性并在该类型上进行设置,而不是在该类型的实例上进行设置。

在您的代码中,只需编写Aa.name而不是,就name可以了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么Java静态变量没有更新?

为什么Python没有静态变量?

为什么Java中没有局部静态变量?

为什么非静态内部类不能具有静态成员(字段和方法)?

从Swift中的非静态方法访问静态变量

处理静态和非静态变量

Android Studio静态或非静态变量和方法

使用静态变量和方法与非静态

Java:为什么可以从类外部的静态方法访问非静态变量?

为什么在Java中直接调用静态变量和方法?

在Java中的静态方法中调用非静态方法(非静态变量错误)

为什么不能有一个静态和非静态方法具有相同的签名?

为什么不能这样静态内部类调用其外部类的非静态方法?

调用没有实例变量的非静态方法

非静态变量,不能从静态内容Java引用

为什么静态和非静态方法不能共享相同的签名?

从静态函数调用非静态变量

从静态函数调用非静态变量

为什么方法无法识别指向静态变量的变量?

swift - 为什么全局静态变量不是 init?

为什么静态块不能访问后确定的静态变量

在Swift中,为什么分配给静态变量也会调用其getter

静态方法和非静态方法有什么区别?

在循环内声明静态和非静态变量

为什么从main读取非静态变量会有问题?

非静态类中私有静态变量的范围

为什么会出现“无法从静态上下文引用的非静态变量”?

为什么会出现“非静态变量和静态上下文”错误?

非静态方法可以修改静态变量吗