【问题标题】:Defining stored type properties on classes [duplicate]在类上定义存储类型属性
【发布时间】:2015-07-15 14:52:32
【问题描述】:

我是一名 Swift 菜鸟,在阅读“The Swift Programming Language”参考书(关于语言指南 > 属性 > 类型属性)中的这一段时发现自己很困惑:

“对于值类型(即结构和枚举),您可以定义存储和计算类型属性。对于类,您只能定义计算类型属性。”

摘自:Apple Inc.“Swift 编程语言”。电子书。 https://itun.es/br/jEUH0.l

但在这之后的几页,可以找到以下代码sn-p:

...
class SomeClass {
    static var storedTypeProperty = "Some value."
    static var computedTypeProperty: Int {
        // return an Int value here
    }
    class var overrideableComputedTypeProperty: Int {
        // return an Int value here
    }
}
...

在类上下文中明确定义了存储类型属性,这显然否定了前面所说的内容。

那么,这是文档错误还是我遗漏了什么?

编辑 1

我不觉得这是来自 this question 的重复。我不是在问为什么没有实现这个功能,因为显然它当前已经实现(因为编译器不会将它识别为错误)。我要问的是文档是否过时或我的解释不正确。

编辑 2

此问题已解决 here。显然文档已经过时了。此功能是在 Swift 1.2 上添加的

【问题讨论】:

  • 我认为苹果没有更新这本书。如果我错了,请纠正我。我是古玩,我自己检查了一下。这段代码工作得很好:class Test { static var someInt = 0 } print(Test.someInt)
  • 我不确定我是否正确理解了您的问题。这就是你要找的stackoverflow.com/questions/30243013/… 吗?
  • @GabrielHuff:您解释了为什么您认为它不是 Why no stored type properties for classes in swift? 的副本。但除非我误解了你的问题(在最后一次编辑之后),否则它是 Stored type properties for classes in Swift 的副本。
  • 好吧,你是对的。第二个问题解决了同样的问题。所以显然文档已经过时了。

标签: swift


【解决方案1】:

我相信文档的意思(以一种相当混乱的方式)是您不能拥有 class 存储的变量(而您仍然可以拥有 static 存储的变量)。

总结一下

class Foo {
  static var bar: Int {      // ok (computed static type variable)
    return 2
  }
  static var foo = ""        // ok (stored static type variable)
  class var foobar: Int {    // ok (computed class type variable)
    return 2
  }
  class var baz = ""         // nope (stored class type variable)
}

【讨论】:

  • Type Property Syntax 的最后一段让我得出了同样的结论。
  • 我在 stackoverflow 的某个地方看到 static 只是 class final 的隐式类型别名,但这在这里不起作用。在这里阅读:stackoverflow.com/a/29588815/4572536
  • 这是有道理的。但我认为这更有可能是一个错误,因为staticclass 的概念仅在下一页介绍。另外,通过阅读这个问题stackoverflow.com/questions/24029581/…(人们认为我在重复),我假设在早期版本中,不可能在类中声明存储类型变量
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-07
  • 2021-01-09
  • 1970-01-01
  • 2019-11-30
  • 2021-07-10
相关资源
最近更新 更多