1
1
//
2
2
// PreferenceBridge.swift
3
- // OpenSwiftUI
3
+ // OpenSwiftUICore
4
4
//
5
- // Audited for RELEASE_2021
6
- // Status: Complete
7
- // ID: A9FAE381E99529D5274BA37A9BC9B074
5
+ // Audited for RELEASE_2024
6
+ // Status: TO BE AUDITED
7
+ // ID: A9FAE381E99529D5274BA37A9BC9B074 (RELEASE_2021)
8
+ // ID: DF57A19C61B44C613EB77C1D47FC679A (RELEASE_2024)
8
9
9
10
internal import OpenGraphShims
10
11
11
12
package final class PreferenceBridge {
12
- unowned let viewGraph : ViewGraph
13
+ weak var viewGraph : ViewGraph ?
14
+ var isValid : Bool = true
13
15
private( set) var children : [ Unmanaged < ViewGraph > ] = [ ]
14
16
var requestedPreferences = PreferenceKeys ( )
15
17
var bridgedViewInputs = PropertyList ( )
@@ -23,9 +25,15 @@ package final class PreferenceBridge {
23
25
}
24
26
25
27
init ( ) {
26
- viewGraph = GraphHost . currentHost as! ViewGraph
28
+ viewGraph = ViewGraph . current
27
29
}
28
30
31
+ deinit {
32
+ if isValid { invalidate ( ) }
33
+ }
34
+
35
+ // FIXME: TO BE AUDITED
36
+
29
37
#if canImport(Darwin) // FIXME: See #39
30
38
func addValue( _ value: AnyAttribute , for keyType: AnyPreferenceKey . Type ) {
31
39
struct AddValue : PreferenceKeyVisitor {
@@ -48,7 +56,7 @@ package final class PreferenceBridge {
48
56
}
49
57
var visitor = AddValue ( combiner: combiner, value: value)
50
58
keyType. visitKey ( & visitor)
51
- viewGraph. graphInvalidation ( from: value)
59
+ viewGraph? . graphInvalidation ( from: value)
52
60
}
53
61
54
62
func removeValue( _ value: AnyAttribute , for keyType: AnyPreferenceKey . Type , isInvalidating: Bool ) {
@@ -78,7 +86,7 @@ package final class PreferenceBridge {
78
86
var visitor = RemoveValue ( combiner: combiner, value: value)
79
87
keyType. visitKey ( & visitor)
80
88
if visitor. changed {
81
- viewGraph. graphInvalidation ( from: isInvalidating ? nil : value)
89
+ viewGraph? . graphInvalidation ( from: isInvalidating ? nil : value)
82
90
}
83
91
}
84
92
@@ -92,7 +100,7 @@ package final class PreferenceBridge {
92
100
) { combiner in
93
101
combiner. addChild ( keys: keys, values: values)
94
102
}
95
- viewGraph. graphInvalidation ( from: combiner. identifier)
103
+ viewGraph? . graphInvalidation ( from: combiner. identifier)
96
104
}
97
105
98
106
func removeHostValue( for keys: Attribute < PreferenceKeys > , isInvalidating: Bool ) {
@@ -112,7 +120,7 @@ package final class PreferenceBridge {
112
120
hasRemoved = true
113
121
}
114
122
if hasRemoved {
115
- viewGraph. graphInvalidation ( from: isInvalidating ? nil : keys. identifier)
123
+ viewGraph? . graphInvalidation ( from: isInvalidating ? nil : keys. identifier)
116
124
}
117
125
}
118
126
0 commit comments