我目前正在将当前项目迁移到Swift3(从2.3开始),并且我的序列类型扩展存在一些问题。
该扩展旨在从源数组返回唯一值的字典。
即var myArray = ["Apple","Apple","Orange","Banana","Banana"]
" .freq" extension以下列格式返回字典。
["Apple":2,"Orange":1,"Banana":2]
以下是当前的Swift 2.3语法:
extension Sequence where Self.Iterator.Element: Hashable {
func freq() -> [Self.Iterator.Element: Int] {
return reduce([:]) { ( accu: [Self.Iterator.Element: Int], element) in
accu[element] = (accu[element]? + 1) ?? 1
return accu
}
}
}
问题是由于语法更改,行accu[element] = (accu[element]? + 1) ?? 1
在Swift 3中不起作用:
不能通过下标分配:accu是一个常量
我确定它可能很容易解决,但似乎无法找到如何在swift3中执行此操作的相关示例。
答案 0 :(得分:3)
试试这个:
extension Sequence where Self.Iterator.Element: Hashable {
func freq() -> [Self.Iterator.Element: Int] {
return reduce([:]) {
( accu: [Self.Iterator.Element: Int], element) in
var accu2 = accu
accu2[element] = (accu2[element] ?? 0) + 1
return accu2
}
}
}