我制定了以下协议。它定义了一个对象,可以在给定值start
的{{1}}和end
之间无限扩展。
0-1
示例实施:
protocol Scalable {
typealias ScalableType
var start:ScalableType { get }
var end:ScalableType { get }
func scale(dub:Double) -> ScalableType?
func series(count count:Int) -> [ScalableType?]
}
我想要做的是找出一种方法,将变量定义为属性,允许任何struct DoubleRange:Scalable {
typealias ScalableType = Double
let start:Double
let end:Double
var diff:Double {
return end - start
}
func scale(dub: Double) -> Double? {
return start + (dub * diff)
}
}
Scalable
为ScalableType
。
这有效:
UIColor
但我无法找出一种定义属性的等效方法。想到以某种方式制作一个包装器,但仍然无法弄明白。
理想情况下,我喜欢这种表达的东西(尽管显然不是编译代码)
func foo<T where T:Scalable, T.ScalableType == UIColor>(scaler:T) {}
答案 0 :(得分:0)
您可以将泛型放在类/结构定义上:
struct ObjectWithScalableColor<T: Scalable where T.ScalableType == UIColor> {
let scalableColor: T
}