通用Swift函数错误Swift 3.0

时间:2017-01-09 01:18:09

标签: swift generics

func multiply<T: Strideable> (lhs: T, rhs: T) -> T {
    return lhs * rhs
}

为什么返回错误: 没有'*'候选者产生预期的上下文结果结果类型'T'

2 个答案:

答案 0 :(得分:0)

通过将*运算符扩展为Double,Int和Float类型找到了解决方法。

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

extension Double: Numeric {}
extension Float: Numeric {}
extension Int: Numeric {}

答案 1 :(得分:0)

查看Strideable协议,它没有方法''。如果你想要它以便'T'可以乘以另一个'T',你应该以'T'有''的方式声明它。

func multiply<T: Strideable> (lhs: T, rhs: T) -> T where T:IntegerArithmetic  {
    return lhs * rhs
}

或者,你也可以像其他答案所说的那样做,因为使用这种方法你只能使用整数。