声明在Swift中采用符合“可以相乘”的泛型类型的函数

时间:2014-09-04 20:38:06

标签: ios swift

如何声明在Swift中采用符合“可以相乘”的泛型类型的函数?

例如:

 func sq <T: "Can be multipied">(x: T) -> T {
    return x*x
 }

所以我可以对Float,Double,CGFloat等进行调整......这有可能吗?

1 个答案:

答案 0 :(得分:5)

您可以像这样定义自己的协议:

protocol Multipliable {
   func *(lhs: Self, rhs: Self) -> Self
}

func sq<T: Multipliable>(value:T) -> T {
  return value * value
}

extension Int: Multipliable {}
extension Double: Multipliable {}

sq(10)   // -> 100
sq(10.0) // -> 100.0

我相信你必须扩展你想要遵守这个协议的每个类,我不知道如果不使用extension就可以工作。

这是一篇关于Equatable协议实施的有趣文章:

http://nshipster.com/swift-default-protocol-implementations/