swift - 如何为 SequenceType 实现通用求和函数,其中 Generator.Element 的类型为 Int

标签 swift generics

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

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

这会导致以下两个错误:

  • 输入 ‘S.Generator.Element’受限于非协议(protocol)类型 ’Int’
  • 二元运算符 '+=‘不能应用于 ’Int' 类型的操作数和 ’S.Generator.Element’

有没有办法定义这个函数来处理任何 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 - 如何为 SequenceType 实现通用求和函数,其中 Generator.Element 的类型为 Int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28676304/

相关文章:

objective-c - 如何在 objective-c -swift 桥接项目中使用 intentdefinition 文件?

swift - 使用 viewdidload 显示 UIView 中的某些元素

c# - 定义实现泛型的接口(interface)依赖

swift - 为什么我需要使用这个 Swift 通用函数来强制类型?

c# - 具有指定类型的接口(interface)的通用实现

ios - 尝试检索提供商数据时如何修复 "Cannot call value of non-function type [UserInfo]"?

ios - Swift 4 - 在未来的精确时钟时间启动计时器

java - 如何解释这种看似不一致的 Java 可变参数行为?

swift - NSAttributedString:图像未显示在 UILabel 中

java - 通用对象数组,其中通用对象的上限与 Object 不同