Skip to content

Commit bf71746

Browse files
Refactor internal UserDefaults observation class (#181)
Co-authored-by: Sindre Sorhus <sindresorhus@gmail.com>
1 parent b8c1e7c commit bf71746

File tree

5 files changed

+113
-223
lines changed

5 files changed

+113
-223
lines changed

Sources/Defaults/Defaults+iCloud.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -249,11 +249,11 @@ final class iCloudSynchronizer {
249249
@Atomic(value: []) private var remoteSyncingKeys: Set<Defaults.Keys>
250250

251251
// TODO: Replace it with async stream when Swift supports custom executors.
252-
private lazy var localKeysMonitor: Defaults.CompositeUserDefaultsAnyKeyObservation = .init { [weak self] observable in
252+
private lazy var localKeysMonitor: Defaults.CompositeDefaultsObservation = .init { [weak self] pair, _ in
253253
guard
254254
let self,
255-
let suite = observable.suite,
256-
let key = keys.first(where: { $0.name == observable.key && $0.suite == suite }),
255+
let suite = pair.suite,
256+
let key = keys.first(where: { $0.name == pair.key && $0.suite == suite }),
257257
// Prevent triggering local observation when syncing from remote.
258258
!remoteSyncingKeys.contains(key)
259259
else {
@@ -273,7 +273,7 @@ final class iCloudSynchronizer {
273273
self.keys.formUnion(keys)
274274
syncWithoutWaiting(keys)
275275
for key in keys {
276-
localKeysMonitor.addObserver(key)
276+
localKeysMonitor.add(key: key)
277277
}
278278
}
279279

@@ -283,7 +283,7 @@ final class iCloudSynchronizer {
283283
func remove(_ keys: [Defaults.Keys]) {
284284
self.keys.subtract(keys)
285285
for key in keys {
286-
localKeysMonitor.removeObserver(key)
286+
localKeysMonitor.remove(key: key)
287287
}
288288
}
289289

Sources/Defaults/Defaults.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ extension Defaults {
239239
initial: Bool = true
240240
) -> AsyncStream<Value> { // TODO: Make this `some AsyncSequence<Value>` when Swift 6 is out.
241241
.init { continuation in
242-
let observation = UserDefaultsKeyObservation2(object: key.suite, key: key.name) { change in
242+
let observation = DefaultsObservation(object: key.suite, key: key.name) { _, change in
243243
// TODO: Use the `.deserialize` method directly.
244244
let value = KeyChange(change: change, defaultValue: key.defaultValue).newValue
245245
continuation.yield(value)
@@ -275,7 +275,7 @@ extension Defaults {
275275
) -> AsyncStream<Void> { // TODO: Make this `some AsyncSequence<Value>` when Swift 6 is out.
276276
.init { continuation in
277277
let observations = keys.indexed().map { index, key in
278-
let observation = UserDefaultsKeyObservation2(object: key.suite, key: key.name) { _ in
278+
let observation = DefaultsObservation(object: key.suite, key: key.name) { _, _ in
279279
continuation.yield()
280280
}
281281

Sources/Defaults/Observation+Combine.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,16 @@ extension Defaults {
77
*/
88
final class DefaultsSubscription<SubscriberType: Subscriber>: Subscription where SubscriberType.Input == BaseChange {
99
private var subscriber: SubscriberType?
10-
private var observation: UserDefaultsKeyObservation?
10+
private var observation: DefaultsObservationWithLifeTime?
1111
private let options: ObservationOptions
1212

1313
init(subscriber: SubscriberType, suite: UserDefaults, key: String, options: ObservationOptions) {
1414
self.subscriber = subscriber
1515
self.options = options
16-
self.observation = UserDefaultsKeyObservation(
16+
self.observation = DefaultsObservationWithLifeTime(
1717
object: suite,
1818
key: key,
19-
callback: observationCallback(_:)
19+
observationCallback
2020
)
2121
}
2222

@@ -33,7 +33,7 @@ extension Defaults {
3333
observation?.start(options: options)
3434
}
3535

36-
private func observationCallback(_ change: BaseChange) {
36+
private func observationCallback(_: SuiteKeyPair, change: BaseChange) {
3737
_ = subscriber?.receive(change)
3838
}
3939
}

0 commit comments

Comments
 (0)