如何为 Generator.Element 类型为 Int 的 SequenceType 实现通用求和函数

How to implement generic sum function for SequenceType where Generator.Element is of type Int

我正在尝试编写一个函数,用于对各种 SequenceType 实现的迭代性能进行基准测试。它应该简单地对序列的内容求和,其中所有元素都是 Ints。我正在努力表达对函数的通用约束...

func sum<S: SequenceType where S.Generator.Element: Int>(s: S) -> Int {
  var sum = 0
  for i in s {
      sum += i
  }
  return sum
}

这会导致以下两个错误:

有没有办法定义此函数以在任何 SequenceType 实现上工作,其中的元素专门用于 Int

约束应该是S.Generator.Element == Int:

func sum<S: SequenceType where S.Generator.Element == Int>(s: S) -> Int {
    var sum = 0
    for i in s {
        sum += i
    }
    return sum
}

整数类型稍微更通用:

func sum<S: SequenceType, T : IntegerType where S.Generator.Element == T >(s: S) -> T {
    var sum : T = 0
    for i in s {
        sum += i
    }
    return sum
}

Swift 3.1 的更新版本:

func sum<S: Sequence>(_ s: S) -> Int where S.Iterator.Element == Int {
    return s.reduce(0){[=10=] + }
}