如何在 Swift 中声明采用符合“可以相乘”的泛型类型的函数?
例如:
func sq <T: "Can be multipied">(x: T) -> T {
return x*x
}
这样我就可以对 Float、Double、CGFloat 等进行平方...这可能吗?
最佳答案
您可以像这样定义自己的协议(protocol):
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
我相信您必须扩展您想要遵守此协议(protocol)的每个类,我不知道有什么方法可以在不使用扩展
的情况下使其工作。
这是一篇关于 Equatable
协议(protocol)实现的有趣文章:
http://nshipster.com/swift-default-protocol-implementations/
关于ios - 在 Swift 中声明采用符合 “can be multiplied” 的泛型类型的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25674604/