【问题标题】:Can't declare a let that uses a previous let?不能声明使用前一个 let 的 let 吗?
【发布时间】:2018-09-18 07:57:46
【问题描述】:

因此,在目标 C、C/C++、.NET 以及我使用过的几乎所有其他语言中,您可以声明可以包含先前常量的常量,例如

#define PI 3.14159
#define HALFPI (PI/2)

const CGFloat BOTTOM_BAR_HEIGHT = 200;
const CGFloat BOTTOMBARCONTENTS_DY = BOTTOM_BAR_HEIGHT/2;

但这似乎在swift中不起作用

let PI=3.14159
let HALF_PI=PI/2

这是一个真正有用的模式,如果你正在尝试做一些事情,比如(许多例子中的一个)布局尺寸,或者任何一组相互依赖的常量。有什么方法可以快速实现这种模式,而不将它们声明为 vars 并将它们设置在初始化函数中(这将使一些非常冗长的代码的大小加倍并降低可维护性,使用 vars 而不是 let 会招致任何低级惩罚,并毁了我对 swift 的第一印象)?谢谢。

【问题讨论】:

  • 定义“似乎不起作用”。
  • 仅供参考 - 不要定义自己的 PI。在需要的地方使用Double.piCGFloat.pi
  • 如果在类中定义了这些常量,请将它们设为static
  • 哎呀,rmaddy,我应该澄清一下,我正在尝试在类主体中的函数之外执行此操作。它似乎在函数体中工作。如果我只在一个功能中需要它们,那会很好。所以我收到编译错误“不能在初始化程序中使用实例成员 XYZ”。 (当然 PI 就是一个例子)
  • 成功了。 (使用静态)。谢谢!!

标签: swift


【解决方案1】:

您可能可以像这样使用 NSObject 类:

import UIKit
class ViewController: NSObject {  
    static let PI = 3.14
    static let HALF_PI = ViewController.PI/2 
}

要实现这一点,您可以使用 Static

并将其用于任何视图控制器,如

 print(ViewController.PI)
 print(ViewController.HALF_PI)

希望对您有所帮助。

【讨论】:

  • 我看到人们通常使用struct 而不是像你这样的类。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-14
  • 1970-01-01
  • 2018-05-28
  • 2020-12-17
  • 2018-10-12
  • 1970-01-01
相关资源
最近更新 更多