Swift常数取决于另一个常数

时间:2015-05-20 19:04:56

标签: ios swift constants

我试图通过以下方式创建一个依赖于另一个的常量:

class Thingy {
 let paddingConstant = 13.0
 let paddingDict = ["padding": paddingConstant]
}

底线给我一个错误"Thingy.Type does not have a member named 'paddingConstant'"

是否可以声明一个依赖于另一个的常量?

5 个答案:

答案 0 :(得分:7)

另一种解决方案是声明此变量lazy。优点是,与计算属性不同,它不会在每次获取其值时执行计算;但不幸的是,不幸的是,它不能成为常数:

class Thingy {
    let paddingConstant = 13.0
    lazy var paddingDict : [String:Double] = 
        ["padding": self.paddingConstant]
}

我将此限制视为Swift语言中的错误。

答案 1 :(得分:5)

您可以将paddingDict移动到init:

class Thingy {
    let paddingConstant = 13.0
    let paddingDict : [String: Double]
    init() {
        paddingDict = ["padding": paddingConstant]
    }
}

答案 2 :(得分:3)

如果定义instance constant property a constant property b,您可以使用其他b的值填充static(在定义时间)。

class Thingy {
    static let paddingConstant = 13.0
    let paddingDict = ["padding": paddingConstant]
}

这是您收到的错误消息的直接答案:

  

Thingy.Type没有名为' paddingConstant'

的成员

通过将paddingConstant设为静态,它变为Type propertyThingy.Type的一部分。

希望这有帮助。

答案 3 :(得分:2)

作为另一种解决方案,您可以使用外部结构来定义常量(以及您可能需要的其他常量):

struct Constants {
    static let paddingConstant = 13.0
}

然后在Thingy class:

中使用它
class Thingy {
  let paddingDict = ["padding": Constants.paddingConstant]
}

答案 4 :(得分:0)

是的,这是可能的。你需要使paddingDict只读计算属性

class Thingy {

    let paddingConstant = 13.0

    var paddingDict : [String : Double] {

        get {return ["padding": paddingConstant] }
    }
}