如何声明在Swift中采用符合“可以相乘”的泛型类型的函数?
例如:
func sq <T: "Can be multipied">(x: T) -> T {
return x*x
}
所以我可以对Float,Double,CGFloat等进行调整......这有可能吗?
答案 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/