FlowInject
这是一个适用于纯 Swift 编写的 iOS 应用依赖注入的 Coordinator Patterns 库。Coordinator pattern 这是一种将 presenter (UINavigationController) 注入每个 Navigator 的简单方法,而不是像其他开源那样复杂的子结构。
🛠 安装
FlowInject 通过 CocoaPods 提供。要安装它,只需将以下行添加到 Podfile 中
pod 'FlowInject'
🚢 使用方法
从 App 启动使用 FlowInject
要从 App 启动使用 Navigator,请确保在 AppDelegate.swift
中以编程方式创建应用的窗口。然后,在 AppDelegate.didFinishLaunching
中将 Navigator 设置为窗口视图堆叠的根。
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
self.window = UIWindow(frame: UIScreen.main.bounds)
let appNavigator = AppNavigator(in: self.window)
return true
}
}
实现每个 Navigator
首先,创建一个 Route
类型的 enum。这个 Enum 的 cases 用作路径。然后,从 Navigator class
继承 Navigator
,并将 Route
类型指定为泛型类型。继承 Navigator 后,在初始化器中将 received presenter
注入,使用 navigate(to destination:)
插入服务和 presenter 以启用场景移动。在屏幕移动的情况下,没有实现如过渡(push、present、pop、disiss)等逻辑,因为每个开发者都有不同的定制需求。:]
我将把这留给你。
num MainRoute: Route {
case detail(content: String)
}
class MainNavigator: Navigator<MainRoute> {
override init(with presenter: UINavigationController?) {
super.init()
self.presenter = presenter
}
func navigate(to destination: MainRoute) {
switch destination {
case .detail(let content):
let viewController = DetailViewController(contentText: content,
detailNavigator:DetailNavigator(with: presenter))
presenter?.pushViewController(viewController, animated: true)
}
}
}
📦 示例应用
要获取更多关于 FlowInject 的信息,请查看示例项目
👤 作者
seungjin,[email protected]
📄 许可协议
FlowInject 在 MIT 许可下可用。有关更多信息,请参阅 LICENSE 文件。