Вы пытаетесь вернуть результат выражения присваивания:
return newResult[arg.key] = counts
или, может быть, вы пытаетесь присвоить результат оператора return? Эта линия не имеет смысла, как вы смотрите на это. Вы должны разделить две вещи, которые вы делаете:
newResult[arg.key] = counts
return newResult
Похоже, что в этой ситуации вам следует использовать другую перегрузку метода reduce
- reduce(into:_:)
.
Используемый в настоящее время метод reduce
требует, чтобы вы каждый раз возвращали новое значение, но вы просто добавляете KVP в словарь, то есть изменяете существующее значение. Это означает, что вы создаете много копий словарей. Это хороший признак того, что reduce(into:_:)
может быть лучше.
func abbreviation(a:[String], b: [String : String]) ->[String : Int] {
// notice the parameter label "into:"
let dict = b.reduce(into: [String : Int]()){ (result, arg) in
let counts = a.reduce(0) { (newcount, value) -> Int in
let count = newcount + (value.components(separatedBy:arg.value).count - 1)
return count
}
result[arg.key] = counts // with reduce(into:_:), you don't return anything, just modify the first argument
}
return dict
}