Cannot assign to property: 'self' is immutable?

I'm confused by this error. Is there a way around it? The ObservedObject here is ObservableObject which extends AnyObject. So I don't see why setting one of its properties should cause struct mutation.

Cannot assign to property: 'self' is immutable
Mark method 'mutating' to make 'self' mutable

The suggestion does not help, since that transfers the problem to var body, which can't be marked as mutating.

import SwiftUI

protocol ExerciseWithNoteRange {
    associatedtype Restriction: Identifiable & Equatable
    var noteRange: ClosedRange<Int> { get set }
    var restriction: Restriction { get set }
}

struct ExampleGenericView<EX: ExerciseWithNoteRange & ObservableObject>: View {

    @ObservedObject var exercise: EX
    let restrictionsInOrder: [EX.Restriction]
    let toString: (EX.Restriction) -> String
    
    var body: some View {
        List(restrictionsInOrder) { r in
           listItem(r)
        }
    }

    private func listItem(_ r: EX.Restriction) -> some View {
        Text(verbatim: toString(r))
        .onTapGesture {
            exercise.restriction = r  // ERROR HERE
        }
    }
}

1 Like