【问题标题】:Class type properties should not have static keyword?类类型属性不应该有静态关键字?
【发布时间】:2015-12-12 07:40:48
【问题描述】:
  1. 这是来自 Apple 文档示例的图像,为什么前 2 个属性有 'static' 关键字?我认为静态应该只用于结构和枚举?

  2. 其次,为什么这个类有存储类型属性?我认为类只能具有计算类型属性???

【问题讨论】:

    标签: swift class types properties static


    【解决方案1】:
    1. Effective Swift 1.2,static 属性现在允许在类中使用。

    2. 始终允许类具有存储属性。

    【讨论】:

    • 但是在声明类类型属性/方法时使用“静态”或“类”关键字有什么区别?
    • 这就是语言的设计方式:Swift 编程语言 说:“您使用 static 关键字定义类型属性。对于类类型的计算类型属性,您可以使用class 关键字来允许子类覆盖超类的实现。”如果您尝试定义 class 存储属性,您会收到一条错误消息,提示该语言“尚不”支持类存储属性:“class 类中尚不支持存储属性;您的意思是 '@987654327 @'?”
    • 是的,我的意思是“静态”,我可以对类中的所有类型方法和类型属性使用“静态”关键字吗?
    • 你可以,但是如果你想让一个子类能够覆盖类型方法,你应该使用class而不是static。但是有一个performance benefit在减少动态调度。
    【解决方案2】:

    来自Xcode 6.3 (Swift 1.2) release notes,下Swift Language Enhancements

    static 现在允许在类中使用方法和属性(作为 class final 的别名)。

    您现在可以在类中声明静态存储属性,这些属性具有全局存储并且是惰性的 在首次访问时初始化(如全局变量)。

    【讨论】:

    • 但是与使用 static 而不是 class 关键字有什么区别呢?
    • 正如上面的引用所说:static(在类的上下文中使用时)是class final 的别名。 final 表示该属性/方法不能被覆盖。您可能对The Importance of Being final 感兴趣。
    猜你喜欢
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多