我正在尝试为cgpoint和cgvector创建一个非常简单的泛型。我只想插入我的变量,并将x,y或dx,dy乘以2
func dblPt<T>(inout point: T){
// double cgpoint, or cgvector
}
我的问题是我无法想到如何引用x或y,vs dx和dy。我没有使用泛型编写任何东西。什么是实现这一目标的最佳方式
答案 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。您可以使用相同的名称调用它们,并使用任一类型调用它们,但内部具有不同的主体。