Swift 依赖于另一个常量的常量
Swift constant that depends on another constant
我正在尝试通过以下方式创建一个依赖于另一个的常量:
class Thingy {
let paddingConstant = 13.0
let paddingDict = ["padding": paddingConstant]
}
底线给我一个错误"Thingy.Type does not have a member named 'paddingConstant'"
。
是否可以声明一个依赖于另一个的常量?
是的,这是可能的。您需要将 paddingDict 设为只读 computed 属性
class Thingy {
let paddingConstant = 13.0
var paddingDict : [String : Double] {
get {return ["padding": paddingConstant] }
}
}
你可以将 paddingDict 移动到 init:
class Thingy {
let paddingConstant = 13.0
let paddingDict : [String: Double]
init() {
paddingDict = ["padding": paddingConstant]
}
}
另一个解决方案是声明这个变量lazy
。优点是,与计算的 属性 不同,它不会在您每次获取其值时都执行计算;但缺点是它不能是一个常数,不幸的是:
class Thingy {
let paddingConstant = 13.0
lazy var paddingDict : [String:Double] =
["padding": self.paddingConstant]
}
我认为该限制是 Swift 语言中的错误。
作为另一种解决方案,您可以使用外部结构来定义常量(以及您可能需要的其他常量):
struct Constants {
static let paddingConstant = 13.0
}
然后在Thingy
中使用class:
class Thingy {
let paddingDict = ["padding": Constants.paddingConstant]
}
您可以使用另一个 constant property b
的值填充 instance constant property a
(在定义时),如果 b
已定义 static
。
class Thingy {
static let paddingConstant = 13.0
let paddingDict = ["padding": paddingConstant]
}
这是对您收到的错误消息的直接回答:
Thingy.Type does not have a member named 'paddingConstant'
事实上,通过使 paddingConstant
静态化,它变成了 Type property
: Thingy.Type
的一部分。
希望对您有所帮助。
我正在尝试通过以下方式创建一个依赖于另一个的常量:
class Thingy {
let paddingConstant = 13.0
let paddingDict = ["padding": paddingConstant]
}
底线给我一个错误"Thingy.Type does not have a member named 'paddingConstant'"
。
是否可以声明一个依赖于另一个的常量?
是的,这是可能的。您需要将 paddingDict 设为只读 computed 属性
class Thingy {
let paddingConstant = 13.0
var paddingDict : [String : Double] {
get {return ["padding": paddingConstant] }
}
}
你可以将 paddingDict 移动到 init:
class Thingy {
let paddingConstant = 13.0
let paddingDict : [String: Double]
init() {
paddingDict = ["padding": paddingConstant]
}
}
另一个解决方案是声明这个变量lazy
。优点是,与计算的 属性 不同,它不会在您每次获取其值时都执行计算;但缺点是它不能是一个常数,不幸的是:
class Thingy {
let paddingConstant = 13.0
lazy var paddingDict : [String:Double] =
["padding": self.paddingConstant]
}
我认为该限制是 Swift 语言中的错误。
作为另一种解决方案,您可以使用外部结构来定义常量(以及您可能需要的其他常量):
struct Constants {
static let paddingConstant = 13.0
}
然后在Thingy
中使用class:
class Thingy {
let paddingDict = ["padding": Constants.paddingConstant]
}
您可以使用另一个 constant property b
的值填充 instance constant property a
(在定义时),如果 b
已定义 static
。
class Thingy {
static let paddingConstant = 13.0
let paddingDict = ["padding": paddingConstant]
}
这是对您收到的错误消息的直接回答:
Thingy.Type does not have a member named 'paddingConstant'
事实上,通过使 paddingConstant
静态化,它变成了 Type property
: Thingy.Type
的一部分。
希望对您有所帮助。