我试图创建一个基本结构,它支持一组类型(Int、Float、可能是string,有时可能是Vec4-matrix)。我已经构建了一个基本结构,并将其与Hashable一致,使类型可平衡,但现在我需要在一个集合中使用这个新结构。
这一行:
struct AdjustmentSet: Set<BaseAdjustment<Any>>
我为集合声明结构的地方是抛出
类型“Any”不符合协议“equalable”
这当然是显而易见的,但我不知道如何在这里定义一个有效的类型(我试过)
T: Equatable
,
Equatable
,什么都不管用)。
struct BaseAdjustment<T: Equatable>: Hashable {
var hashValue: Int {
return displayName.hashValue
}
static func == (lhs: BaseAdjustment<T>, rhs: BaseAdjustment<T>) -> Bool {
return lhs.displayName == rhs.displayName &&
lhs.value == rhs.value &&
lhs.isApplied == rhs.isApplied
}
var min: T?
var max: T?
var displayName: String = ""
var value: T?
var defaultValue: T?
var isApplied: Bool = true
init(min: T, max: T, displayName: String, defaultValue: T?) {
self.min = min
self.max = max
self.displayName = displayName
self.defaultValue = defaultValue
self.value = defaultValue
self.isApplied = true
}
}
struct AdjustmentSet: Set<BaseAdjustment<Any>> {
static var brightness = BaseAdjustment<CGFloat>(min: 0, max: 1, displayName: "Brightness", defaultValue: 0)
static var exposure = BaseAdjustment<CGFloat>(min: 0, max: 1, displayName: "Exposure", defaultValue: 0)
static var contrast = BaseAdjustment<CGFloat>(min: 0, max: 1, displayName: "Contrast", defaultValue: 0)
}
增编:
我希望随着
Opaque Types
在Swift 5中,我们可以通过定义类型集来消除这种复杂性
some BaseAdjustment
.