Skip to content

Commit 3e8a4f4

Browse files
authored
Add OptionalView implementation (#284)
1 parent ad170f0 commit 3e8a4f4

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
//
2+
// OptionalView.swift
3+
// OpenSwiftUICore
4+
//
5+
// Audited for iOS 18.0
6+
// Status: Complete
7+
8+
package import OpenGraphShims
9+
10+
extension Optional: PrimitiveView where Wrapped: View {}
11+
12+
extension Optional: View where Wrapped: View {
13+
public typealias Body = Never
14+
15+
nonisolated public static func _makeView(
16+
view: _GraphValue<Self>,
17+
inputs: _ViewInputs
18+
) -> _ViewOutputs {
19+
if _SemanticFeature_v2.isEnabled {
20+
return makeImplicitRoot(view: view, inputs: inputs)
21+
} else {
22+
let metadata = makeConditionalMetadata(ViewDescriptor.self)
23+
return makeDynamicView(metadata: metadata, view: view, inputs: inputs)
24+
}
25+
}
26+
27+
nonisolated public static func _makeViewList(
28+
view: _GraphValue<Self>,
29+
inputs: _ViewListInputs
30+
) -> _ViewListOutputs {
31+
let metadata = makeConditionalMetadata(ViewDescriptor.self)
32+
return makeDynamicViewList(metadata: metadata, view: view, inputs: inputs)
33+
}
34+
35+
nonisolated public static func _viewListCount(inputs: _ViewListCountInputs) -> Int? {
36+
Wrapped._viewListCount(inputs: inputs)
37+
}
38+
}
39+
40+
extension Optional: DynamicView where Wrapped: View {
41+
package static var canTransition: Bool { true }
42+
43+
package func childInfo(metadata: ConditionalMetadata<ViewDescriptor>) -> (any Any.Type, UniqueID?) {
44+
withUnsafePointer(to: self) { ptr in
45+
metadata.childInfo(ptr: ptr, emptyType: EmptyView.self)
46+
}
47+
}
48+
49+
package func makeChildView(
50+
metadata: ConditionalMetadata<ViewDescriptor>,
51+
view: Attribute<Optional<Wrapped>>,
52+
inputs: _ViewInputs
53+
) -> _ViewOutputs {
54+
withUnsafePointer(to: self) { ptr in
55+
metadata.makeView(ptr: ptr, view: view, inputs: inputs)
56+
}
57+
}
58+
59+
package func makeChildViewList(
60+
metadata: ConditionalMetadata<ViewDescriptor>,
61+
view: Attribute<Optional<Wrapped>>,
62+
inputs: _ViewListInputs
63+
) -> _ViewListOutputs {
64+
withUnsafePointer(to: self) { ptr in
65+
metadata.makeViewList(ptr: ptr, view: view, inputs: inputs)
66+
}
67+
}
68+
69+
package typealias ID = UniqueID
70+
71+
package typealias Metadata = ConditionalMetadata<ViewDescriptor>
72+
}

0 commit comments

Comments
 (0)