Skip to content

Commit 620df74

Browse files
committed
Complete VersionSeed implementation
1 parent 80b63f8 commit 620df74

File tree

1 file changed

+14
-7
lines changed

1 file changed

+14
-7
lines changed

Sources/OpenSwiftUI/Internal/Graph/VersionSeed.swift

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
//
55
// Created by Kyle on 2024/1/5.
66
// Lastest Version: iOS 15.5
7-
// Status: WIP
7+
// Status: Complete
88
// ID: 1B00D77CE2C80F9C0F5A59FDEA30ED6B
99

1010
struct VersionSeed: CustomStringConvertible {
@@ -31,12 +31,19 @@ struct VersionSeedTracker<Key: HostPreferenceKey> {
3131
struct VersionSeedSetTracker {
3232
private var values: [Value]
3333

34-
func addPreference<Key: HostPreferenceKey>(_ keyType: Key.Type) {
35-
34+
mutating func addPreference<Key: HostPreferenceKey>(_: Key.Type) {
35+
values.append(Value(key: _AnyPreferenceKey<Key>.self, seed: .invalid))
3636
}
3737

38-
func updateSeeds(to: PreferenceList) {
39-
38+
mutating func updateSeeds(to preferences: PreferenceList) {
39+
for index in values.indices {
40+
var visitor = UpdateSeedVisitor(preferences: preferences, seed: nil)
41+
values[index].key.visitKey(&visitor)
42+
guard let seed = visitor.seed else {
43+
continue
44+
}
45+
values[index].seed = seed
46+
}
4047
}
4148
}
4249

@@ -53,7 +60,7 @@ extension VersionSeedSetTracker {
5360
var seed: VersionSeed
5461
var matches: Bool?
5562

56-
mutating func visit<Key>(key: Key.Type) where Key : PreferenceKey {
63+
mutating func visit(key: (some PreferenceKey).Type) {
5764
let valueSeed = preferences[key].seed
5865
matches = seed.isValid && valueSeed.isValid && seed.value == valueSeed.value
5966
}
@@ -63,7 +70,7 @@ extension VersionSeedSetTracker {
6370
let preferences: PreferenceList
6471
var seed: VersionSeed?
6572

66-
mutating func visit<Key>(key: Key.Type) where Key : PreferenceKey {
73+
mutating func visit(key: (some PreferenceKey).Type) {
6774
seed = preferences[key].seed
6875
}
6976
}

0 commit comments

Comments
 (0)