我制定了以下协议(protocol)。它定义了一个对象,该对象可以在 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>?
最佳答案
您可以将泛型放在类/结构定义上:
struct ObjectWithScalableColor<T: Scalable where T.ScalableType == UIColor> {
let scalableColor: T
}
关于ios - 如何快速地为具有内部类型的协议(protocol)定义类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33244093/