好例子网vip

干净的Swift VIP (Clean Swift VIP)

Clean Swift (a.k.a VIP) is Uncle Bob’s Clean Architecture applied to iOS and Mac projects. The Clean Swift Architecture is not a framework. It is a set of Xcode templates to generate the Clean Architecture components for you. That means you have the freedom to modify the templates to suit your needs.

Clean Swift(又名VIP)是Bob叔叔的Clean Architecture,适用于iOS和Mac项目。 Clean Swift体系结构不是框架。 它是一组Xcode模板,可以为您生成Clean Architecture组件。 这意味着您可以自由修改模板以适合您的需求。

  • View Controller查看控制器
  • Models楷模
  • Router路由器
  • Worker工人
  • Interactor互动者
  • Presenter主持人

查看控制器 (View Controller)

View Controller starts and ends the VIP cycle sends data to the Interactor though it doesn’t get responses from the Interactor This class has a one-sided interaction with the Presenter View Controller gets responses from the Presenter but can’t transfer anything to it

View Controller开始和结束VIP周期将数据发送到Interactor,尽管它没有从Interactor获得响应此类与Presenter进行了单方面交互View Controller从Presenter获得了响应,但无法将任何内容传递给它

import UIKitprotocol IMostPopularViewController: class {  var router: IMostPopularRouter? { get set }}class MostPopularViewController: UIViewController { var interactor: IMostPopularInteractor?   var router: IMostPopularRouter? override func viewDidLoad() {        super.viewDidLoad()        // do someting...    }}extension MostPopularViewController: IMostPopularViewController {  // do someting...}

楷模 (Models)

The Models class is related to each component in the VIP model Models is a class containing such structures as Request, Response, and ViewModel:

Models类与VIP模型中的每个组件相关。Models是一个类,其中包含诸如Request,Response和ViewModel的结构:

  • Request

    请求

    A request model contains parameters sent to the API request, which are user inputs such as text entered in text fields and values chosen in pickers.

    请求模型包含发送到API请求的参数,这些参数是用户输入,例如在文本字段中输入的文本和在选择器中选择的值。

  • Response

    响应

    This type of model receives the response from the API and stores the appropriate data.

    这种类型的模型从API接收响应并存储适当的数据。

  • ViewModel

    视图模型

    This model encapsulates responses sent to the Presenter in primitive data types such as String and Int.

    该模型将发送到Presenter的响应封装为原始数据类型,例如String和Int。

import UIKitstruct MostPopularModel {    struct Request {      // do someting...       func parameters() -> [String: Any]? {          // do someting...         return nil        } }   struct Response {     // do someting... }}

路由器 (Router)

The Router deals with transitions by passing data between view controllers this done with helper classes

路由器通过在视图控制器之间传递数据(通过帮助程序类完成)来处理过渡

action occure in view controller call Router class with delegate method

视图控制器调用带有代理方法的路由器类中发生操作

//MARK: - in View Controller    func getMostPopularArticles(){        router?.navigateToArticle(article_id : id )    }//MARK: - in Routerimport UIKitprotocol IMostPopularRouter: class { func navigateToArticle(article_id : Int )}class MostPopularRouter: IMostPopularRouter {     weak var view: MostPopularViewController?

  init(view: MostPopularViewController?) {      self.view = view }

  func navigateToArticle(article_id : Int ){        view?.navigate(type: .modal, module: GeneralRoute.mostPopularArticles, completion: nil)    }}
  • General Root

    一般根

    contain all modules routing from view controller and passing data trhough general root select you destination pass parameters to destination configration class

    包含所有从视图控制器路由并通过通用根目录传递数据的模块,选择目标传递参数至目标配置类

import Foundationimport UIKitenum MostPopularRoute: IRouter {    /*     If you want passing with parameters     you just add like this:         */     case sample     case sample2(parameter: [String: Any])    /*     you can use: String, Int, [String: Any], etc..    */}extension MostPopularRoute {    var module: UIViewController? {        /*         Setup module with parameters like:           */         switch self {         case .sample:            return SampleConfiguration.setup()        case .sample2(let parameters):            return SampleConfiguration2.setup(parameters: parameters)         }

    }}
  • Configuration

    组态

    The Configurator is a class that initializes all the Clean Swift components. Yet this class is optional. You can configure scenes by creating a private function in ViewController.

    Configurator是用于初始化所有Clean Swift组件的类。 但是此类是可选的。 您可以通过在ViewController中创建私有功能来配置场景。

import Foundationimport UIKitclass MostPopularConfiguration {    static func setup(parameters: [String: Any] = [:]) -> UIViewController {        let controller = MostPopularViewController()        let router = MostPopularRouter(view: controller)        let presenter = MostPopularPresenter(view: controller)        let manager = MostPopularManager()        let interactor = MostPopularInteractor(presenter: presenter, manager: manager)

        controller.interactor = interactor        controller.router = router        interactor.parameters = parameters        return controller    }}

工人 (Worker)

The Worker handles all the API and Core Data requests and responses and prepares data for the Interactor It also sends success and error responses to the Interactor

Worker处理所有API和核心数据请求和响应,并为Interactor准备数据。它还将成功和错误响应发送给Interactor

import Foundationprotocol IArticlesManager: class {   func mostPopularFromApi(complition: @escaping (NSError?, Bool, ArticlesModel.MostPopularArticle?) -> Void)}class ArticlesManager: IArticlesManager {   func mostPopularFromApi(complition: @escaping (NSError?, Bool, ArticlesModel.MostPopularArticle?) -> Void) {       NetworkService.share.request(endpoint: ArticlesEndpoint.mostPopular, success: { (responseData) in           let response = responseData           do {               let decoder = JSONDecoder()               let data = try decoder.decode(ArticlesModel.MostPopularArticle.self, from: response)               print(data)               complition(nil , true , data)           } catch let error {               print("error : ", error.localizedDescription)               complition(error as NSError , true , nil)           }       })   }}

互动者 (Interactor)

The Interactor is an intermediary between the Worker and Presenter First, it communicates with the ViewController which passes all the query parameters required for the Worker Before sending data to the Worker the Interactor checks this data If everything is good, the Worker returns the response and the Interactor sends a response to the Presenter

Interactor是Worker和Presenter之间的中介,首先,它与ViewController通信,该ViewController传递了Worker所需的所有查询参数。在将数据发送给Worker之前,Interactor会检查该数据。如果一切正常,Worker返回响应,并且交互者将响应发送给演示者

//MARK: - in View Controller    func getMostPopularArticles(){        interactor?.getMostPopularArticles()    }

//MARK: - in Interactorimport UIKitprotocol IArticlesInteractor: class { var parameters: [String: Any]? { get set }    func getMostPopularArticles()}class ArticlesInteractor: IArticlesInteractor {    var presenter: IArticlesPresenter?    var manager: IArticlesManager?    var parameters: [String: Any]?    init(presenter: IArticlesPresenter, manager: IArticlesManager) {       self.presenter = presenter       self.manager = manager    }

    func getMostPopularArticles() {        manager?.mostPopularFromApi( complition: { (error, success, response) in            if(success == true){                print("getMostPopularArticles Done.....")                self.presenter?.showResponse(response: response)            } else {                self.presenter?.showErrorAlert(title: "Error", msg: error?.localizedDescription )            }        })    }}

主持人 (Presenter)

The Presenter is responsible for presentation logic. It decides how data will be presented to the user. The Presenter organizes the response sent by the Interactor into view models suitable for display. Next, the Presenter passes those view models back to the View Controller to display to the user

演示者负责演示逻辑。 它决定如何将数据呈现给用户。 演示者将交互器发送的响应组织到适合显示的视图模型中。 接下来,Presenter将这些视图模型传递回View Controller以显示给用户

import UIKitprotocol IArticlesPresenter: class { func showErrorAlert(title: String, msg: String?)    func showResponse(response: ArticlesModel.MostPopularArticle?)}class ArticlesPresenter: IArticlesPresenter {      weak var view: IArticlesViewController?

  init(view: IArticlesViewController?) {        self.view = view }    func showErrorAlert(title: String, msg: String?) {        view?.showErrorAlert(title: title, msg: msg)    }    func showResponse(response: ArticlesModel.MostPopularArticle?) {        view?.showResponse(response: response)    }}

Clean Swift的优点 (Advantages of Clean Swift)

  • Ready-made templates现成的模板
  • Unidirectional flow of data单向数据流
  • Testability可测性
  • Reusability可重用性
  • Collaboration合作

Clean Swift的缺点 (Disadvantages of Clean Swift)

  • Barriers to entry进入壁垒
  • Over engineering过度工程

you can check the source code on GitHub from HereThank you :)

您可以从这里在GitHub上检查源代码谢谢:)

翻译自: https://medium.com/dev-genius/clean-swift-vip-with-example-6f6e643a1a01

好例子网vip


http://www.taodudu.cc/news/show-4776631.html

相关文章:

  • 电子学会青少年软件编程 Python编程等级考试一级真题解析(选择题)2022年3月
  • python快速入门【五】---- 面向对象编程、python类
  • Win11 更新完检测不到音频设备
  • IT66311 是一款单输入、单输出 HDMI 2.0 重新定时缓冲器,支持高达 6.0Gbps 的信令速率。
  • kali入侵内网电脑和入侵外网电脑
  • 网络基础——IP地址子网掩码MAC地址DNS(详解)
  • 修改mq服务器ip,将外部IP地址绑定到Rabbit MQ服务器
  • 23、IP地址的表示及分类
  • java ip过滤器_java实现IP地址过滤
  • CIDR表示IP地址规律
  • Python可视化工具
  • python可视化疫情事实报告(pyecharts)——可视化
  • PyQt5教程(一)——Python的安装
  • 在Pycharm中配置Pyqt5工具(2023年新版教程)
  • PyQt5 教科书级完整教程(一)安装与入门
  • Mysql常用函数(一)
  • PHP连接MySQL数据常用的函数_PHP操作Mysql常用函数
  • Mysql常用函数集合
  • MySQL常用函数大全(面试篇)
  • mysql 中abs函数_Mysql常用函数
  • MySQL常用函数大全详解
  • 软件项目管理第4版课后习题[附解析]第八章
  • 软件项目管理第4版课后习题[附解析]第十章
  • 软件项目管理课后习题——第7章软件项目的质量管理与配置管理
  • 音视频开发--Hi3516a+IMX290--过程(1)
  • 安装失败解决方法-针式PKM
  • 怎么快速生成gif动图?三步完成gif合成
  • linux中打开gif图片命令,Terminalizer – 记录Linux终端活动并生成GIF动画
  • corn表达式生成器
  • code generator java_CodeGenerator代码生成器

好例子网vip_使用示例清洁Swift VIP相关推荐

  1. python数据分析与展示 pdf课件_python数据分析与展示 课件 相关实例(示例源码)下载 - 好例子网...

    开发语言:Python | 大小:9.84KB | 发布时间:2020-05-13 | 立即下载 开发语言:Python | 大小:0.24M | 发布时间:2019-09-09 | 立即下载 开发语 ...

  2. python学生管理系统gui版好例子网_python图书管理系统gui 相关实例(示例源码)下载 - 好例子网...

    开发语言:Python | 大小:19.05M | 发布时间:2019-05-27 | 发布人:李易峰 相关标签: 立即下载 开发语言:Python | 大小:0.21M | 发布时间:2020-08 ...

  3. python可以手眼定标吗_手眼标定 相关实例(示例源码)下载 - 好例子网

    开发语言:Others | 大小:3.03KB | 发布时间:2020-01-09 | 立即下载 开发语言:Others | 大小:1.12KB | 发布时间:2020-10-23 | 立即下载 开发 ...

  4. python大作业报告_python大作业含报告 相关实例(示例源码)下载 - 好例子网

    开发语言:Python | 大小:0.04M | 发布时间:2020-05-18 | 立即下载 开发语言:Python | 大小:29.59M | 发布时间:2020-05-27 | 立即下载 开发语 ...

  5. python编程锦囊pdf百度云_python编程锦囊 相关实例(示例源码)下载 - 好例子网

    开发语言:Python | 大小:42.01M | 发布时间:2020-08-05 | 立即下载 开发语言:Python | 大小:41.83M | 发布时间:2020-11-11 | 立即下载 开发 ...

  6. python爬虫课设报告_python爬虫小说设计报告 相关实例(示例源码)下载 - 好例子网...

    开发语言:Python | 大小:0.07M | 发布时间:2020-11-12 | 立即下载 开发语言:Python | 大小:2.24KB | 发布时间:2020-10-23 | 发布人:吴wu ...

  7. python做一个考试系统_python考试系统 相关实例(示例源码)下载 - 好例子网

    开发语言:Python | 大小:0.02M | 发布时间:2016-07-07 | 发布人:linq 相关标签: 立即下载 开发语言:Python | 大小:0.21M | 发布时间:2020-08 ...

  8. 网上订餐系统python程序代码_python网上订餐系统 相关实例(示例源码)下载 - 好例子网...

    开发语言:Python | 大小:0.02M | 发布时间:2016-07-07 | 发布人:linq 相关标签: 立即下载 开发语言:Python | 大小:0.21M | 发布时间:2020-08 ...

  9. 玩转华为数据中心交换机系列 | 配置基于子网划分VLAN示例

    素材来源:华为数据中心交换机配置指南 一边学习一边整理试验笔记,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:玩转华为数据中心交换机系列 | 汇总_COCOgsta的博客-CSDN博客 组网需求 某 ...

最新文章

  1. 双击.exe文件出现Debug Error: abort() has been called解决办法(之一)
  2. d-s 多传感器信息融合 matlab实现_自动驾驶中的多传感器融合
  3. MySQL之表结构设计
  4. 论文浅尝 - ACL2020 | 用于实体对齐的邻居匹配网络
  5. gitbook mysql_使用Gitbook做笔记
  6. linux命令——crontab的使用方法
  7. 写给中学生的算法入门:学代码之前看这篇就够了
  8. 电商产品页多种出彩表现设计手法!
  9. python linux 下开发环境搭建
  10. 使用WinIO库实现保护模式下的IO和内存读写(_inp,_outp)
  11. 2021孝感高中高考成绩查询,孝感高中成绩排名2021,孝感中考分数线排行榜
  12. 宝塔apache mysql_宝塔Linux面板命令大全,安装宝塔,Nginx,Apache,MySQL等 - SEO中文网...
  13. HDU 5857 Median
  14. AJAX技术和AXIO
  15. UserScript 改变网页颜色
  16. 计算机是怎么运行的?为什么它可以自动化的工作?这和时钟信号又有什么关系?
  17. 偏倚方差分解——R code
  18. 蜗居中折射的三类男人
  19. ggplot2设置坐标轴范围_ggplot2学习笔记之图形排列
  20. MyBatis 游标查询大量数据

热门文章

  1. 缩放比例 页面缩放 自适应布局(布局不变)vue
  2. ESP8266对接天猫精灵-单路继电器控制
  3. 服务器维护详解,服务器维护Linux tr 命令详解
  4. html页面怎么加锚点,html页面添加锚点
  5. 十几个CSS高级常见技巧汇总(虚线框、三角形、优惠券卡券、滚动条、多行溢出...)...
  6. 移动端之在不同尺寸大小的手机上展示同一效果解决方案(修正二) by FungLeo
  7. 苹果商店ASA广告投放之TTR和CR
  8. 掌握这十个Linux命令,秒变Linux老手
  9. Git使用个人访问令牌提交代码到仓库
  10. 为什么说Thunderbird是最好的桌面RSS阅读器