The markdown parsing is broken/disabled for release notes. Sorry about that, I'm chasing the source of a crash that's been bringing this website down for the last couple of days.
Removed `NavigationRouterChildable`.
Added logger and changed TabSwiftUICoordinator initialiser
1 year ago
- Added Logger
- Added ability to disable logger
- Changed print statements with logger
- Changed `TabSceneProviding` access level to `public`
- Changed TabSceneProviding access level to public
- Removed SceneProviding inheritance of TabSceneProviding
- Renamed scene to tabScene in TabSceneProviding
- Moved TabSceneProviding inside public directory
- Fixed tests
- Now `TabSwiftUICoordinator` has two initialisers - one with `SwiftUICoordinator<Void>` and another one with `TabSceneProviding`.
Fixed documentation comments
1 year ago
- Fixed retain cycle of `TabSwiftUICoordinator` when inside `NavigationSwiftUICoordinator`
- Cleanup tests
# Improved navigation coordination
- Added `NavigationSwiftUICoordinator`
- Now you can subclass `NavigationSwiftUICoordinator` instead of `SwiftUICoordinator` to have pushing capability
- Removed `CoordinationMode`
- Fixed retain cycle issues
## Example
``` Swift
final class HomeCoordinator: NavigationSwiftUICoordinator<Void> {
override func createScene() -> AnyView {
let viewModel = HomeViewModel(coordinator: self)
return AnyView(HomeScene(viewModel: viewModel))
}
func openAccount() -> AnyPublisher<String, Never> {
let coordinator = AccountCoordinator(id: "[ACCOUNT_COORDINATOR " + UUID().uuidString + "]")
return push(coordinator)
}
}
```
``` Swift
final class AccountCoordinator: SwiftUICoordinator<String> {
override func createScene() -> AnyView {
let viewModel = AccountViewModel(coordinator: self)
return AnyView(AccountScene(viewModel: viewModel))
}
func dismiss(result: String) {
finish(result: result)
}
func openChat() -> AnyPublisher<Void, Never> {
if let router = navigationRouter {
let coordinator = ChatCoordinator(id: "[CHAT_COORDINATOR " + UUID().uuidString + "]")
return router.push(coordinator)
} else {
let coordinator = ChatCoordinator(id: "[CHAT_COORDINATOR " + UUID().uuidString + "]", presentationStyle: .sheet)
return coordinate(to: coordinator)
}
}
}
```
# Create coordinator for pure SwiftUI project
- Support for modal presentations
- Support for custom modal presentations
- Support for Navigation Stack
- Support for Tab View
- Easily create coordinator by sub-classing base coordinator