【发布时间】:2015-10-20 18:25:19
【问题描述】:
我制定了以下协议。它定义了一个可以在start 和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) {}
但我想不出一个等效的方法来定义这样的属性。正在考虑以某种方式制作包装器,但仍然无法弄清楚。
理想情况下,我想要这样表达的东西(即使显然不是编译代码)
var foo:Scalable<where Self.ScalableType == UIColor>?
【问题讨论】:
-
Scalable属性的ScalableType是否必须是UIColor或者是任何Scalable与ScalableType定义为UIColor将有这个新属性? -
@keithbhunter 对于这一次特定的实例,我想要一个对象符合
Scalable并且内部类型为UIColor的属性。Scalable的其他实现将具有不同的内部类型。
标签: ios swift protocols swift2