0
votes

I'm stuck with a

Cannot use mutating member on immutable value: function call returns immutable value

error on this chunk of code:

var bagsToScan: [BagQR] {
    var initial: [Bag] = []
    return TaskManager.shared.tasks.value
        .filter({ $0.state == .ready })
        .reduce(initial) { (acc, task) in
            var bagQR = task.bags.filter({
                !tasksChecked.contains(BagQR(bag: $0, taskName: task.name).taskName)
            }).map({
                BagQR(bag: $0, taskName: task.name)
            })

            acc.append(contentsOf: bagQR)
        }.sort({ $0.bag.scanIndex < $1.bag.scanIndex })
}

The error is printed on the reduce(initial) { (acc, task) in line. Thanks for your help!

1
acc is immutable inside the reduce closure. Try return acc + bagQR. - Fabio Felici
Change sort to sorted. - matt

1 Answers

1
votes

Use reduce(into:_:)

.reduce(into: initial) { (acc, task) in
//...

That will make acc mutable.

And use sorted(by:) on the result of that reduce.

.sorted(by: { $0.bag.scanIndex < $1.bag.scanIndex })