Предполагая, что Object
- это struct
, на основании сообщения об ошибке ...
Это просто показывает, что функции высшего порядка не должны использоваться везде . map
преобразует каждый элемент в последовательности во что-то еще. Поэтому вместо назначения score
вам нужно вернуть новый Object
с измененным score
.
var scoresAssigned = filteredObjects.map { $0.withScore(scoreDict[$0.id.uuidString.lowercased()]) }
withScore
будет выглядеть примерно так:
func withScore(_ score: Int) -> Object {
var copy = self
copy.score = score
return copy
}
Но , если вы просто хотите присвоить счету новое значение, я рекомендую простое для l oop.
for i in 0..<filteredObjects.count {
filteredObjects[i].score = scoreDict[$0.id.uuidString.lowercased()]
}
Также обратите внимание, что вам нужно получить доступ к словарю только один раз. Если ноль, ключ не существует.
var filteredObjects = [Object]()
for i in 0..<objects.count {
if let score = scoreDict[$0.id.uuidString.lowercased()] {
objects[i].score = score
filteredObjects.append(objects[i])
}
}