我试图通过以下方式创建一个依赖于另一个的常量:
class Thingy {
let paddingConstant = 13.0
let paddingDict = ["padding": paddingConstant]
}
底线给我一个错误"Thingy.Type does not have a member named 'paddingConstant'"
。
是否可以声明一个依赖于另一个的常量?
答案 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 property
:Thingy.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] }
}
}