【问题标题】:Why can't I used a global variable as part of another global variable's definition in swift?为什么我不能在 swift 中使用全局变量作为另一个全局变量定义的一部分?
【发布时间】:2016-10-07 23:42:30
【问题描述】:

我不明白为什么 Swift 不允许这样做:

let graphPointCircleDiameter: CGFloat = 5.0
let graphPointCircleDisplacement: CGFloat = graphPointCircleDiameter/2

我得到错误:

实例成员“graphPointCircleDiameter”不能用于 NameOfVC 类型。

谁能解释一下为什么 Swift 中的全局范围内的另一个变量不能引用静态“let”变量?

谢谢!

【问题讨论】:

  • 我认为您会想要包含更多代码。您提供的代码在操场上工作得很好(我刚刚检查过)。指示这是一个实例成员的错误消息意味着至少涉及一个类定义......
  • 你需要一个计算属性var graphPointCircleDisplacement: CGFloat { return graphPointCircleDiameter/2 }

标签: swift global-variables let


【解决方案1】:

let 定义一个常量,而var 定义一个变量。如果要从全局常量中分配变量,则可以将 graphPointCircleDisplacement 设置为 lazy var

let graphPointCircleDiameter: CGFloat = 5.0
lazy var graphPointCircleDisplacement: CGFloat = self.graphPointCircleDiameter/2

作为Leo Dabus mentioned,你也可以返回常量的值来定义另一个:

var graphPointCircleDisplacement: CGFloat { return graphPointCircleDiameter/2 }

【讨论】:

  • 你能解释一下为什么需要计算属性或为什么需要惰性 var 属性吗?对我来说,似乎应该可以在其他全局变量的定义中使用作为常量的全局变量,比如在 JavaScript 中。这与在 Swift 中初始化全局变量的时间有关吗?
猜你喜欢
  • 2021-01-14
  • 2019-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-05
  • 1970-01-01
相关资源
最近更新 更多