You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: learning/ios/navigation-swiftui.md
+86-3Lines changed: 86 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -96,8 +96,30 @@ router.pop() // вернуться назад
96
96
router.replace(.signIn) // очистить стек и перейти на авторизацию
97
97
98
98
```
99
-
Роутер удобно получать через @EnvironmentObject, так его не нужно передавать вручную во все экраны.
99
+
Как router передается между экранами:
100
+
Роутер удобно получать через `@EnvironmentObject`, так его не нужно вручную передавать во все экраны.
101
+
- AppRouterHost создаёт и хранит объект `AppRouter`.
102
+
- Все экраны внутри этого хоста получают роутер через `environmentObject(router)`.
103
+
- SwiftUI автоматически вкладывает объект в иерархию view, так что любой экран, который находится внутри `AppRouterHost`, может использовать его через @`EnvironmentObject`.
100
104
105
+
В AppRouterHost:
106
+
107
+
```swift
108
+
@ObservedObjectprivatevar router = AppRouter<T>()
109
+
110
+
var body: some View {
111
+
NavigationStack(path: $navigationPath) {
112
+
routeView(router, rootRoute)
113
+
.navigationDestination(
114
+
or: T.self,
115
+
destination: { routeView(router, $0) }
116
+
)
117
+
}.environmentObject(router) // роутер передается всем дочерним экранам
В этот момент RootScreenView переключает показ на `MainNavigationView`.
174
195
Если пользователь нажимает "Выйти", то срабатывает `LogoutNavigationHookView`, и всё сбрасывается на SignIn.
175
196
197
+
## LogoutNavigationHookView
198
+
199
+
В приложениях часто нужно сбросить навигацию при выходе пользователя. Для этого используется LogoutNavigationHookView.
200
+
Он оборачивает контент и отслеживает события логаута через logoutHandler. Когда происходит событие логаута, вызывается onLogout(), и можно, например, сбросить стек навигации на экран авторизации.
Copy file name to clipboardExpand all lines: learning/kotlin-native/swift-interop.md
+9Lines changed: 9 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -21,6 +21,15 @@ LoggerKt.log("Hello from iOS")
21
21
```
22
22
То есть доступ к функции осуществляется не напрямую, а через сгенерированный класс LoggerKt.
23
23
24
+
Однако при использовании [SKIE](https://skie.touchlab.co/intro) всё работает так, как ожидается - глобальные функции становятся настоящими глобальными функциями в Swift.
0 commit comments