为CGPoint和CGVector创建swift泛型

时间:2014-09-24 18:41:39

标签: ios xcode generics swift xcode6

我正在尝试为cgpoint和cgvector创建一个非常简单的泛型。我只想插入我的变量,并将x,y或dx,dy乘以2

func dblPt<T>(inout point: T){
    // double cgpoint, or cgvector

}

我的问题是我无法想到如何引用x或y,vs dx和dy。我没有使用泛型编写任何东西。什么是实现这一目标的最佳方式

2 个答案:

答案 0 :(得分:2)

您希望如何使用协议/扩展程序? 这是一个例子。

protocol VectorConvertible {
    func toVector() -> CGVector
    class func fromVector(vec: CGVector) -> Self
}

extension CGVector: VectorConvertible {
    func toVector() -> CGVector { return self }
    static func fromVector(vec: CGVector) -> CGVector { return vec }
}

extension CGPoint: VectorConvertible {
    func toVector() -> CGVector { return CGVectorMake(x, y) }
    static func fromVector(vec: CGVector) -> CGPoint { return CGPointMake(vec.dx, vec.dy) }
}

func dblPt<V: VectorConvertible>(inout v: V) {
    let vec = v.toVector()
    v = V.fromVector(CGVectorMake(vec.dx * 2, vec.dy * 2))
}

答案 1 :(得分:1)

不是编写泛型函数,而是编写一个重载函数 - 也就是说,执行两次,但使用cgvector和cgpoint。您可以使用相同的名称调用它们,并使用任一类型调用它们,但内部具有不同的主体。