swift
106 lines · 3 tabs
Sofia Martinez
Jan 2026
3 tabs
import UIKit
protocol Coordinator: AnyObject {
var navigationController: UINavigationController { get set }
var childCoordinators: [Coordinator] { get set }
func start()
}
extension Coordinator {
func addChild(_ coordinator: Coordinator) {
childCoordinators.append(coordinator)
}
func removeChild(_ coordinator: Coordinator) {
childCoordinators = childCoordinators.filter { $0 !== coordinator }
}
}
import UIKit
class AppCoordinator: Coordinator {
var navigationController: UINavigationController
var childCoordinators: [Coordinator] = []
private let window: UIWindow
init(window: UIWindow) {
self.window = window
self.navigationController = UINavigationController()
}
func start() {
// Check if user is logged in
if AuthManager.shared.isLoggedIn {
showMainFlow()
} else {
showAuthFlow()
}
window.rootViewController = navigationController
window.makeKeyAndVisible()
}
private func showAuthFlow() {
let authCoordinator = AuthCoordinator(navigationController: navigationController)
authCoordinator.delegate = self
addChild(authCoordinator)
authCoordinator.start()
}
private func showMainFlow() {
let mainCoordinator = MainCoordinator(navigationController: navigationController)
addChild(mainCoordinator)
mainCoordinator.start()
}
}
extension AppCoordinator: AuthCoordinatorDelegate {
func authCoordinatorDidFinish(_ coordinator: AuthCoordinator) {
removeChild(coordinator)
showMainFlow()
}
}
import UIKit
class PostsCoordinator: Coordinator {
var navigationController: UINavigationController
var childCoordinators: [Coordinator] = []
init(navigationController: UINavigationController) {
self.navigationController = navigationController
}
func start() {
let viewModel = PostsViewModel()
let viewController = PostsViewController(viewModel: viewModel)
viewController.coordinator = self
navigationController.pushViewController(viewController, animated: true)
}
func showPostDetail(postId: Int) {
let viewModel = PostDetailViewModel(postId: postId)
let viewController = PostDetailViewController(viewModel: viewModel)
viewController.coordinator = self
navigationController.pushViewController(viewController, animated: true)
}
func showCreatePost() {
let createCoordinator = CreatePostCoordinator(
navigationController: navigationController
)
createCoordinator.delegate = self
addChild(createCoordinator)
createCoordinator.start()
}
}
protocol CreatePostCoordinatorDelegate: AnyObject {
func createPostCoordinatorDidFinish(_ coordinator: CreatePostCoordinator)
}
extension PostsCoordinator: CreatePostCoordinatorDelegate {
func createPostCoordinatorDidFinish(_ coordinator: CreatePostCoordinator) {
removeChild(coordinator)
}
}
3 files · swift
Explain with highlit
The Coordinator pattern separates navigation logic from view controllers, promoting reusability and testability. Coordinators own navigation controllers and decide which screens to show based on user actions. Each flow (onboarding, main, settings) has its own coordinator. Child coordinators handle sub-flows, notifying parents when complete. This removes navigation code from view controllers, making them focused on presentation. ViewControllers call coordinator methods instead of pushing directly. For SwiftUI, coordinators work with NavigationStack's programmatic navigation. The pattern scales to complex apps with multiple entry points and deep linking.
Related snips
swift
import Combine
import Foundation
class SearchViewModel: ObservableObject {
@Published var searchQuery = ""
@Published var results: [SearchResult] = []
Combine operators for data transformation
swift
combine
reactive
by Sofia Martinez
1 tab
swift
import SwiftUI
struct ContentView: View {
@State private var username = ""
@State private var isLoggedIn = false
@StateObject private var viewModel = LoginViewModel()
SwiftUI declarative UI with state management
swift
swiftui
ios
by Sofia Martinez
2 tabs
erb
<nav class="site-nav" data-controller="preload">
<ul>
<li>
<%= link_to "Dashboard", dashboard_path,
class: "nav-link",
data: { turbo_preload: true } %>
Speed up perceived performance with Turbo preload links
rails
hotwire
turbo
by codesnips
3 tabs
swift
import SwiftUI
struct CardModifier: ViewModifier {
var backgroundColor: Color = .white
var cornerRadius: CGFloat = 12
var shadowRadius: CGFloat = 5
Custom SwiftUI view modifiers for reusability
swift
swiftui
ios
by Sofia Martinez
2 tabs
swift
import Foundation
import UIKit
class ImageProcessor {
// Background processing with main thread updates
func processImage(_ image: UIImage, completion: @escaping (UIImage?) -> Void) {
Grand Central Dispatch for concurrency
swift
gcd
concurrency
by Sofia Martinez
1 tab
swift
import SwiftUI
enum Route: Hashable {
case postDetail(id: Int)
case userProfile(id: Int)
case settings
Navigation patterns with NavigationStack
swift
swiftui
navigation
by Sofia Martinez
2 tabs
Share this code
Here's the card — post it anywhere.