BothamUI 2.0.0

BothamUI 2.0.0

测试已测试
语言语言 SwiftSwift
许可证 自定义
发布最后发布2016 年 9 月
SPM支持 SPM

Karumi 维护。



BothamUI 2.0.0

Karumi logoBothamUI

BothamUI 是用 Swift 编写的 MVP(Model-View-Presenter)框架。

本项目将帮助您设置所有展示逻辑。BothamUI 提供了代表此模式主要组件的类,如 BothamViewControllerBothamPresenter

此外,我们还将使用线框导航模型和服务定位器示例。

屏幕截图

Screenshot1

应用程序 UI/UX 设计 由 Luis Herrero 完成。

数据由 Marvel 提供。© 2015 MARVEL

用法

此框架包含所有实现展示逻辑所需的类,遵循 MVP 模式。要使用视图包,使您的 ViewControllerBotham ViewController 继承,并在 Storyboard 中指定与哪个类和 Storyboard ID 链接

import BothamUI

class SampleViewController: BothamViewController {
    /*...*/
}

storyboardReference

Storyboard

BothamStoryboard 提供了一系列方法,帮助您通过 Storyboard ID 实例化视图控制器。默认情况下,instantiateViewController() 会搜索与类名相同的 Storyboard ID 的视图控制器。

import BothamUI

let mainStoryboard = BothamStoryboard(name: "Main")
let viewController: SampleViewController = mainStoryboard.instantiateViewController("SampleViewController")
let viewController: SampleViewController = mainStoryboard.instantiateViewController()

展示者

为了遵循 MVP 模式,BothamUI 还提供了一组 BothamPresenter 协议,将负责所有展示逻辑。BothamUI 将负责将您的视图(一个 BothamViewController)与展示者链接,并订阅其生命周期。为此,创建一个实现 BothamPresenter 的类并将其链接到您的视图

import BothamUI

class SamplePresenter: BothamPresenter {
    private weak var ui: SampleUI?

    init(ui: CharacterDetailUI) {
        self.ui = ui
    }

    func viewDidLoad() {
        /* ... */
    }
}
protocol SampleUI: BothamUI {
    /* ... */
}
class SampleViewController: BothamViewController, SampleUI {
    /*...*/
}

依赖注入

BothamUI 是围绕依赖注入的概念构建的,所有依赖项都通过构造函数或属性提供,这取决于 UIKit 允许我们做什么。

视图控制器实例化

在示例中,使用服务定位器用于实例化视图控制器,但您也可以使用 Swinject 或其他 DI 框架。

class ServiceLocator {

    static let sharedInstance = ServiceLocator()

    func provideSampleViewController() -> SampleViewController {
        let viewController: SampleViewController = provideMainStoryboard().viewController()
        viewController.presenter = SamplePresenter(ui: viewController)
        return viewController
    }
}

生命周期

一旦视图和控制层链接成功,您就可以从控制层直接响应视图的生命周期。同时,您也可以方便地从控制层调用视图。

class SamplePresenter: BothamPresenter {
    private weak var ui: SampleUI?

    init(ui: CharacterDetailUI) {
        self.ui = ui
    }

    func viewDidLoad() {
        self.ui?.showMessage("Welcome to Botham")
    }
}

要了解生命周期方法调用的时间点,请参考以下表格

BothamPresenter UIViewController
viewDidLoad viewDidLoad
viewWillAppear viewWillAppear
viewDidAppear viewDidAppear
viewWillDisappear viewWillDisappear
viewDidDisappear viewDidDisappear

注意事项

  • 使用Storyboard实例化的ViewControllers不能引用泛型类型。
  • 控制层和视图控制器之间存在循环引用(类似于视图控制器和数据源)。

您想贡献吗?

您可以随时向我们报告或向库中加入任何有用的功能,我们将很高兴在您的帮助下进行改进。

请注意,您的PR必须通过Travis-CI验证。

许可协议

Copyright 2015 Karumi

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   https://apache.ac.cn/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.