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条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

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

来自分类Dev

处理静态和非静态变量

来自分类Dev

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

来自分类Dev

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

来自分类Dev

为什么不调用从返回null的静态方法链接的静态变量抛出NPE?

来自分类Dev

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

来自分类Dev

为什么没有将静态变量分配给static方法返回的值?

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

如何从静态方法中引用非静态变量?

来自分类Dev

静态变量没有增加

来自分类Dev

具有静态和非静态变量的数学运算

来自分类Dev

可能静态和非静态变量具有相同的名称

来自分类Dev

具有静态和非静态变量的数学运算

来自分类Dev

什么时候在Swift中使用静态常量和变量?

来自分类Dev

从静态变量访问静态方法

来自分类Dev

从静态变量引用静态方法

来自分类Dev

使用静态方法更改静态变量

来自分类Dev

静态方法中的静态变量

Related 相关文章

  1. 1

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

  2. 2

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

  3. 3

    处理静态和非静态变量

  4. 4

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

  5. 5

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

  6. 6

    为什么不调用从返回null的静态方法链接的静态变量抛出NPE?

  7. 7

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

  8. 8

    为什么没有将静态变量分配给static方法返回的值?

  9. 9

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

  10. 10

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

  11. 11

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

  12. 12

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

  13. 13

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

  14. 14

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

  15. 15

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

  16. 16

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

  17. 17

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

  18. 18

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

  19. 19

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

  20. 20

    如何从静态方法中引用非静态变量?

  21. 21

    静态变量没有增加

  22. 22

    具有静态和非静态变量的数学运算

  23. 23

    可能静态和非静态变量具有相同的名称

  24. 24

    具有静态和非静态变量的数学运算

  25. 25

    什么时候在Swift中使用静态常量和变量?

  26. 26

    从静态变量访问静态方法

  27. 27

    从静态变量引用静态方法

  28. 28

    使用静态方法更改静态变量

  29. 29

    静态方法中的静态变量

热门标签

归档