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
}
}
}