首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift:为什么非静态方法不能在没有dynamicType的情况下调用静态变量和常量(静态let)?

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

Stack Overflow用户
提问于 2016-04-11 08:53:53
回答 1查看 1K关注 0票数 2

它破坏了我对静态变量和常量的看法。

为什么斯威夫特不允许我们在其他方法中调用静态变量和常数?

例如:

代码语言:javascript
复制
class Aa {
    static let name = "Aario"
    func echo() {
        print(name)      // Error!
    } 
}

食人魔先生叫我用dynamicType

代码语言:javascript
复制
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来调用静态变量呢?

最后,答案是:

代码语言:javascript
复制
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!!!

这和其他语言真的不一样。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-11 09:06:26

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

类型属性是用点语法查询和设置的,就像实例属性一样。但是,类型属性是在类型上查询和设置的,而不是在该类型的实例上设置的。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36544007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档