FlowInject 1.0.1

FlowInject 1.0.1

jinnify 维护。



  • 作者
  • seungjin

Imgur

FlowInject

Language Version License Platform

这是一个适用于纯 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 文件。