Skip to content

Commit 6e08278

Browse files
committed
wip
1 parent fe3f4ff commit 6e08278

File tree

1 file changed

+22
-6
lines changed

1 file changed

+22
-6
lines changed

Sources/ComposableArchitecture/Observation/ObservationStateRegistrar.swift

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -103,12 +103,19 @@ extension ObservationStateRegistrar: Equatable, Hashable, Codable {
103103
_ member: inout Member,
104104
_ oldValue: Member,
105105
_ isIdentityEqual: (Member, Member) -> Bool,
106-
_ shouldNotifyObservers: (Member, Member) -> Bool
106+
_ shouldNotifyObservers: (Member, Member) -> Bool = { _, _ in true }
107107
) {
108108
if !isIdentityEqual(oldValue, member) {
109109
let newValue = member
110110
member = oldValue
111-
self.mutate(subject, keyPath: keyPath, &member, newValue, isIdentityEqual, shouldNotifyObservers)
111+
self.mutate(
112+
subject,
113+
keyPath: keyPath,
114+
&member,
115+
newValue,
116+
isIdentityEqual,
117+
shouldNotifyObservers
118+
)
112119
}
113120
}
114121
}
@@ -132,9 +139,10 @@ extension ObservationStateRegistrar: Equatable, Hashable, Codable {
132139
keyPath: KeyPath<Subject, Member>,
133140
_ value: inout Value,
134141
_ newValue: Value,
135-
_ isIdentityEqual: (Value, Value) -> Bool
142+
_ isIdentityEqual: (Value, Value) -> Bool,
143+
_ shouldNotifyObservers: (Value, Value) -> Bool = { _, _ in true }
136144
) {
137-
if isIdentityEqual(value, newValue) {
145+
if isIdentityEqual(value, newValue) || !shouldNotifyObservers(value, newValue) {
138146
value = newValue
139147
} else {
140148
self.registrar.withMutation(of: subject, keyPath: keyPath) {
@@ -171,12 +179,20 @@ extension ObservationStateRegistrar: Equatable, Hashable, Codable {
171179
keyPath: KeyPath<Subject, Member>,
172180
_ member: inout Member,
173181
_ oldValue: Member,
174-
_ isIdentityEqual: (Member, Member) -> Bool
182+
_ isIdentityEqual: (Member, Member) -> Bool,
183+
_ shouldNotifyObservers: (Member, Member) -> Bool = { _, _ in true }
175184
) {
176185
if !isIdentityEqual(oldValue, member) {
177186
let newValue = member
178187
member = oldValue
179-
self.mutate(subject, keyPath: keyPath, &member, newValue, isIdentityEqual)
188+
self.mutate(
189+
subject,
190+
keyPath: keyPath,
191+
&member,
192+
newValue,
193+
isIdentityEqual,
194+
shouldNotifyObservers
195+
)
180196
}
181197
}
182198
}

0 commit comments

Comments
 (0)