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

时间:2015-02-23 14:43:05

标签: swift generics

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

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’约束为非协议类型’Int’
  • 二进制运算符'+=‘无法应用于’Int'’S.Generator.Element’
  • 类型的操作数

有没有办法定义此函数来处理任何SequenceType实现,其中的元素专门用于Int

2 个答案:

答案 0 :(得分:5)

约束应为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
}

答案 1 :(得分:0)

Swift 3.1的更新版本:

// Move to Trash

        let startAccess = SecurityScopeManager.shared.startAccess()
        guard startAccess == true else {
            log.warning("Starting file access failed")
        }

        do {
            let url = URL(fileURLWithPath: application.path)
            try FileManager.default.trashItem(at: url, resultingItemURL: nil)
        } catch let error {
            log.error(error)
        }