在swift中,如何使用内部类型为协议定义类型

时间:2015-10-20 18:25:20

标签: ios swift protocols swift2

我制定了以下协议。它定义了一个对象,可以在给定值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) } } ScalableScalableType

这有效:

UIColor

但我无法找出一种定义属性的等效方法。想到以某种方式制作一个包装器,但仍然无法弄明白。

理想情况下,我喜欢这种表达的东西(尽管显然不是编译代码)

func foo<T where T:Scalable, T.ScalableType == UIColor>(scaler:T) {}

1 个答案:

答案 0 :(得分:0)

您可以将泛型放在类/结构定义上:

struct ObjectWithScalableColor<T: Scalable where T.ScalableType == UIColor> {
    let scalableColor: T
}