Skip to content

Commit 23fa167

Browse files
authored
Optimize HostingExample project (#217)
1 parent 98021d5 commit 23fa167

File tree

6 files changed

+136
-30
lines changed

6 files changed

+136
-30
lines changed

Example/Example.xcodeproj/project.pbxproj

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
/* End PBXFileReference section */
5454

5555
/* Begin PBXFileSystemSynchronizedRootGroup section */
56+
27C4C20C2D8178CF00511552 /* Examples */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Examples; sourceTree = "<group>"; };
5657
27E6C4F62D2842D80010502F /* Configurations */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); name = Configurations; path = ../Configurations; sourceTree = "<group>"; };
5758
/* End PBXFileSystemSynchronizedRootGroup section */
5859

@@ -130,6 +131,7 @@
130131
27D49DF92BA604FB00F6E2E2 /* HostingExample */ = {
131132
isa = PBXGroup;
132133
children = (
134+
27C4C20C2D8178CF00511552 /* Examples */,
133135
27D49DFA2BA604FB00F6E2E2 /* AppDelegate.swift */,
134136
27D49DFC2BA604FB00F6E2E2 /* SceneDelegate.swift */,
135137
27D49DFE2BA604FB00F6E2E2 /* ViewController.swift */,
@@ -186,6 +188,9 @@
186188
);
187189
dependencies = (
188190
);
191+
fileSystemSynchronizedGroups = (
192+
27C4C20C2D8178CF00511552 /* Examples */,
193+
);
189194
name = HostingExample;
190195
packageProductDependencies = (
191196
27D49E0D2BA60AF600F6E2E2 /* OpenSwiftUI */,
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
//
2+
// AppearanceActionModifierExample.swift
3+
// HostingExample
4+
5+
#if OPENSWIFTUI
6+
import OpenSwiftUI
7+
#else
8+
import SwiftUI
9+
#endif
10+
import Foundation
11+
12+
struct AppearanceActionModifierExample: View {
13+
@State private var first = true
14+
15+
var body: some View {
16+
Color(uiColor: first ? .red : .blue)
17+
.onAppear {
18+
print("View appear")
19+
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
20+
first.toggle()
21+
}
22+
}
23+
.onDisappear {
24+
print("View disappear")
25+
}
26+
.id(first)
27+
}
28+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
//
2+
// ConditionalContentExample.swift
3+
// HostingExample
4+
5+
#if OPENSWIFTUI
6+
import OpenSwiftUI
7+
#else
8+
import SwiftUI
9+
#endif
10+
import Foundation
11+
12+
// FIXME
13+
struct ConditionalContentExample: View {
14+
@State private var first = true
15+
16+
var body: some View {
17+
if first {
18+
Color.red
19+
.onAppear {
20+
print("Red appear")
21+
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
22+
first.toggle()
23+
}
24+
}
25+
.onDisappear {
26+
print("Red disappear")
27+
}
28+
.id(first)
29+
} else {
30+
Color.blue
31+
.onAppear {
32+
print("Blue appear")
33+
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
34+
first.toggle()
35+
}
36+
}
37+
.onDisappear {
38+
print("Blue disappear")
39+
}
40+
}
41+
}
42+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
//
2+
// NamespaceExample.swift
3+
// HostingExample
4+
5+
#if OPENSWIFTUI
6+
import OpenSwiftUI
7+
#else
8+
import SwiftUI
9+
#endif
10+
import Foundation
11+
12+
struct NamespaceExample: View {
13+
@State private var first = true
14+
@Namespace private var id
15+
16+
var body: some View {
17+
Color(uiColor: first ? .red : .blue)
18+
.onAppear {
19+
print("View appear \(id)")
20+
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
21+
first.toggle()
22+
}
23+
}
24+
.onDisappear {
25+
print("View disappear \(id)")
26+
}
27+
.id(first)
28+
}
29+
}

Example/HostingExample/ViewController.swift

Lines changed: 1 addition & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -39,37 +39,8 @@ final class EntryViewController: UIViewController {
3939
}
4040
}
4141

42-
// TODO: Known issue
43-
// 1. State toggle crash
44-
// 2. pop - UIHostingView deinit crash / onDisappear
45-
// 3. if else builder issue
4642
struct ContentView: View {
47-
@State private var first = true
48-
4943
var body: some View {
50-
// if first {
51-
Color(uiColor: first ? .red : .blue)
52-
.onAppear {
53-
print("View appear")
54-
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
55-
first.toggle()
56-
}
57-
}
58-
.onDisappear {
59-
print("Red disappear")
60-
}
61-
.id(first)
62-
// } else {
63-
// Color.blue
64-
// .onAppear {
65-
// print("Blue appear")
66-
// DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
67-
// first.toggle()
68-
// }
69-
// }
70-
// .onDisappear {
71-
// print("Blue disappear")
72-
// }
73-
// }
44+
AppearanceActionModifierExample()
7445
}
7546
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
//
2+
// NamespaceTests.swift
3+
// OpenSwiftUICoreTests
4+
5+
import Testing
6+
import OpenSwiftUICore
7+
import Foundation
8+
9+
struct NamespaceTests {
10+
@Test
11+
func example() {
12+
struct ContentView: View {
13+
@State private var first = false
14+
@Namespace private var id
15+
16+
var body: some View {
17+
Color(uiColor: first ? .red : .blue)
18+
.onAppear {
19+
print("View appear")
20+
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
21+
first.toggle()
22+
}
23+
}
24+
.onDisappear {
25+
print("Red disappear")
26+
}
27+
.id(first)
28+
}
29+
}
30+
}
31+
}

0 commit comments

Comments
 (0)