Skip to content

Commit b46e780

Browse files
committed
feat: added diContainer example in SIngleEventSubscriber Target
1 parent 97e2157 commit b46e780

8 files changed

Lines changed: 41 additions & 7 deletions

File tree

Examples/SingleNavigator/02-SingleEventSubscriber/02-SingleEventSubscriber.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
/* Begin PBXBuildFile section */
1010
292248052B6B1438006CCA00 /* LogManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 292248042B6B1438006CCA00 /* LogManager.swift */; };
1111
292248082B6B144D006CCA00 /* Logging in Frameworks */ = {isa = PBXBuildFile; productRef = 292248072B6B144D006CCA00 /* Logging */; };
12+
29BD3A652CD5144E009DC84F /* SharedRootViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29BD3A642CD5144E009DC84F /* SharedRootViewModel.swift */; };
1213
29C639032B44FEAA00FCFE0F /* SingleEventSubscriberApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29C639022B44FEAA00FCFE0F /* SingleEventSubscriberApp.swift */; };
1314
29C639072B44FEAB00FCFE0F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 29C639062B44FEAB00FCFE0F /* Assets.xcassets */; };
1415
29C6390B2B44FEAB00FCFE0F /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 29C6390A2B44FEAB00FCFE0F /* Preview Assets.xcassets */; };
@@ -32,6 +33,7 @@
3233

3334
/* Begin PBXFileReference section */
3435
292248042B6B1438006CCA00 /* LogManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogManager.swift; sourceTree = "<group>"; };
36+
29BD3A642CD5144E009DC84F /* SharedRootViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SharedRootViewModel.swift; sourceTree = "<group>"; };
3537
29C638FF2B44FEAA00FCFE0F /* SingleEventSubscriber.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SingleEventSubscriber.app; sourceTree = BUILT_PRODUCTS_DIR; };
3638
29C639022B44FEAA00FCFE0F /* SingleEventSubscriberApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SingleEventSubscriberApp.swift; sourceTree = "<group>"; };
3739
29C639062B44FEAB00FCFE0F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
@@ -94,6 +96,7 @@
9496
29C639022B44FEAA00FCFE0F /* SingleEventSubscriberApp.swift */,
9597
93D683EF2B463DA700FD2C24 /* AppDependency.swift */,
9698
93D683F12B463DB100FD2C24 /* AppRouterGroup.swift */,
99+
29BD3A642CD5144E009DC84F /* SharedRootViewModel.swift */,
97100
292248042B6B1438006CCA00 /* LogManager.swift */,
98101
29C639062B44FEAB00FCFE0F /* Assets.xcassets */,
99102
29C639082B44FEAB00FCFE0F /* SingleEventSubscriber.entitlements */,
@@ -268,6 +271,7 @@
268271
932D1E8A2B46B190000E50C3 /* DeepLinkItem.swift in Sources */,
269272
93D683F92B463DFC00FD2C24 /* HomeRouteBuilder.swift in Sources */,
270273
29C639032B44FEAA00FCFE0F /* SingleEventSubscriberApp.swift in Sources */,
274+
29BD3A652CD5144E009DC84F /* SharedRootViewModel.swift in Sources */,
271275
93D683FE2B463E4600FD2C24 /* Page1RouteBuilder.swift in Sources */,
272276
93D684052B46523300FD2C24 /* Page2LinkSubscriber.swift in Sources */,
273277
93D683FC2B463E2800FD2C24 /* Page1View.swift in Sources */,
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
import LinkNavigator
22

3-
struct AppDependency: DependencyType { }
3+
struct AppDependency: DependencyType {
4+
let sharedRootViewModel: SharedRootViewModel
5+
}

Examples/SingleNavigator/02-SingleEventSubscriber/SingleEventSubscriber/Page/Home/HomeRouteBuilder.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@ struct HomeRouteBuilder<RootNavigator: RootNavigatorType> {
55

66
static func generate() -> RouteBuilderOf<RootNavigator> {
77
var matchPath: String { "home" }
8-
return .init(matchPath: matchPath) { navigator, _, _ -> RouteViewController? in
9-
WrappingController(matchPath: matchPath) {
10-
HomeView(navigator: navigator)
8+
return .init(matchPath: matchPath) { navigator, _, diContainer -> RouteViewController? in
9+
guard let env: AppDependency = diContainer.resolve() else { return .none }
10+
return WrappingController(matchPath: matchPath) {
11+
HomeView(
12+
navigator: navigator,
13+
sharedViewModel: env.sharedRootViewModel)
1114
}
1215
}
1316
}

Examples/SingleNavigator/02-SingleEventSubscriber/SingleEventSubscriber/Page/Home/HomeView.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,16 @@ import SwiftUI
66
struct HomeView: View {
77

88
let navigator: RootNavigatorType
9+
@ObservedObject var sharedViewModel: SharedRootViewModel
910
@State var message = ""
1011

1112
var body: some View {
1213
VStack(spacing: 30) {
1314
PathIndicator(currentPath: navigator.getCurrentPaths().joined(separator: " -> "))
1415
.padding(.top, 32)
1516

17+
Text("Shared Text: \(sharedViewModel.text)")
18+
1619
VStack(spacing: 16) {
1720
TextField("Type message here", text: $message)
1821
.textFieldStyle(.roundedBorder)

Examples/SingleNavigator/02-SingleEventSubscriber/SingleEventSubscriber/Page/Page1/Page1RouteBuilder.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,16 @@ struct Page1RouteBuilder<RootNavigator: RootNavigatorType> {
55

66
static func generate() -> RouteBuilderOf<RootNavigator> {
77
var matchPath: String { "page1" }
8-
return .init(matchPath: matchPath) { navigator, items, _ -> RouteViewController? in
8+
return .init(matchPath: matchPath) { navigator, items, diContainer -> RouteViewController? in
9+
guard let env: AppDependency = diContainer.resolve() else { return .none }
910
let query: HomeToPage1Item? = items.decoded()
1011
let deepLinkItem: DeepLinkItem? = items.decoded()
1112
return WrappingController(matchPath: matchPath) {
1213
Page1View(
1314
navigator: navigator,
1415
item: query,
15-
deepLinkItem: deepLinkItem)
16+
deepLinkItem: deepLinkItem,
17+
sharedViewModel: env.sharedRootViewModel)
1618
}
1719
}
1820
}

Examples/SingleNavigator/02-SingleEventSubscriber/SingleEventSubscriber/Page/Page1/Page1View.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,23 @@ struct Page1View: View {
66
let navigator: RootNavigatorType
77
let item: HomeToPage1Item?
88
let deepLinkItem: DeepLinkItem?
9+
@ObservedObject var sharedViewModel: SharedRootViewModel
910

1011
var body: some View {
1112
VStack(spacing: 30) {
1213
PathIndicator(currentPath: navigator.getCurrentPaths().joined(separator: " -> "))
1314
.padding(.top, 32)
1415

16+
Text("Shared Text: \(sharedViewModel.text)")
17+
18+
Button(action: { sharedViewModel.update(text: "Page1View Updated!!") }) {
19+
Text("Change Shared ViewModel Text")
20+
}
21+
22+
Button(action: { navigator.back(isAnimated: true) }) {
23+
Text("Back")
24+
}
25+
1526
GroupBox {
1627
VStack(spacing: 10) {
1728
HStack {
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import Foundation
2+
3+
final class SharedRootViewModel: ObservableObject {
4+
@Published var text: String = "Initialized"
5+
6+
func update(text: String) {
7+
self.text = text
8+
}
9+
}

Examples/SingleNavigator/02-SingleEventSubscriber/SingleEventSubscriber/SingleEventSubscriberApp.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import SwiftUI
55
struct SingleEventSubscriberApp: App {
66
let singleNavigator = SingleLinkNavigator(
77
routeBuilderItemList: AppRouterGroup().routers,
8-
dependency: AppDependency())
8+
dependency: AppDependency(sharedRootViewModel: .init()))
99

1010
var body: some Scene {
1111
WindowGroup {

0 commit comments

Comments
 (0)