我正在尝试编写一个用于对各种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
?
答案 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)
}