在swift中重用实例常量

时间:2015-06-05 08:06:33

标签: swift

我试图在Swift中设置一个实例常量/变量,直接重用它来设置另一个实例常量/变量

此代码不起作用:

let stLoginViewYDeltaWhenKeyboardIsShowing = DEVICE_HAS_IPHONE4_SCREEN_SIZE ? 0.0 : -16.0
let loginViewYDeltaWhenKeyboardIsShowing = IS_ST_TARGET ? stLoginViewYDeltaWhenKeyboardIsShowing : 30.0

它出错了:

'LoginViewController.Type' does not have a member named 'stLoginViewYDeltaWhenKeyboardIsShowing'

此代码确实编译但看起来不太好:

static let stLoginViewYDeltaWhenKeyboardIsShowing = DEVICE_HAS_IPHONE4_SCREEN_SIZE ? 0.0 : -16.0
let loginViewYDeltaWhenKeyboardIsShowing = IS_ST_TARGET ? LoginViewController.stLoginViewYDeltaWhenKeyboardIsShowing : 30.0

有更好的方法吗?在Objective-C中,#define和正常变量都可以工作。

2 个答案:

答案 0 :(得分:1)

你可以这样做:

class var myConstant: String  { return "my constant" }

由于它是一个计算属性,因此您无法“覆盖”其值,因此其值是常量。我认为它比使用“静态让”更整洁

所以对你的情况来说:

class var stLoginViewYDeltaWhenKeyboardIsShowing: CGFloat { 
    return DEVICE_HAS_IPHONE4_SCREEN_SIZE ? 0.0 : -16.0
}

编辑:感谢@ABakerSmith指出你不需要写 得到{return}

答案 1 :(得分:0)

使用静电是最好的方法,它是干净的,并且最有意义。如果你想要一个const,那么就像你一直在使用let。你可以使用一个更短的名称,因为上下文绑定了你的视图控制器(很明显它的用途)。

但是,既然你要求,为了你的需要,有一个更好的解决方案。使用自动布局约束并避免像这样的硬编码常量。我已经从两个项目中删除了这样的逻辑,这是一个麻烦。键盘的东西很棘手,你只需找到你能理解的最简单的通用解决方案,然后使用约束。