这个问题涉及到Swift 2.2中作为协议扩展编写的函数的效率。有没有人知道一种加速这个运行时的方法?
假设我有一个Int符合的协议号
protocol Number: Equatable, IntegerLiteralConvertible {
init(_ int: Int)
init(_ number: Self)
func +(lhs: Self, rhs: Self) -> Self
func *(lhs: Self, rhs: Self) -> Self
func -(lhs: Self, rhs: Self) -> Self
func /(lhs: Self, rhs: Self) -> Self
}
extension Int: Number { }
现在我想写一个阶乘函数作为Number的扩展
extension Number {
func factorialNumber() -> Self {
if self == 0 { return 1 }
return self * (self - 1).factorialNumber()
}
}
我还编写了与Int的扩展相同的函数
extension Int {
func factorialInt() -> Int {
if self == 0 { return 1 }
return self * (self - 1).factorialInt()
}
}
当我测量这些函数的运行时间时,会发现有很大的不同。
此屏幕截图启用了全模块优化。
我猜在运行时泛型会带来一些开销。有没有更好的方法来做这件事?仅仅编写相同的函数作为Int,Double,Float的扩展,而不是试图编写一个协议函数,这有意义吗?
谢谢
https://stackoverflow.com/questions/38152433
复制相似问题