ios - 如何快速地为具有内部类型的协议(protocol)定义类型

标签 ios swift protocols swift2

我制定了以下协议(protocol)。它定义了一个对象,该对象可以在 startend 给定值 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 其中 ScalableTypeUIColor.

这个有效:

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/

相关文章:

ios - 在 Swift 中创建一个 UIAlertAction

ios - UIViewController 包含崩溃

ios - 如何使用 Swift 在 vImageBoxConvolve_ARGB8888() 中使用 UnsafePointer?

protocols - 实现 BitTorrent 协议(protocol)

javascript - 使用 Javascript 使用 HTTP 以外的协议(protocol)连接服务器

ios - 空指针的取消引用

iphone - NSOperation 中显示的 UIAlertView - View Controller 无响应

ios - UITableView 内的 Collection View 重用问题

ios - swift - 将 JSON 数据保存到本地文件

inheritance - 如何从 ViewController 调用方法?