ios - Model View Presenter 和 iOS (Swift) 架构

标签 ios swift architecture mvp

我一直在研究将 Model View Presenter 架构应用于新的 iOS 项目。经过一番阅读,我发现这个 post有最好的例子。链接到原始代码要点 here .

示例底部有汇编代码:

// Assembling of MVP
let model = Person(firstName: "David", lastName: "Blaine")
let view = GreetingViewController()
let presenter = GreetingPresenter(view: view, person: model)
view.presenter = presenter

此外,作者指出:

Since we don’t want the View to know about the Model, it is not right to perform assembly in presenting view controller (which is the View), thus we have to do it somewhere else. For example, we can make the app-wide Router service which will be responsible for performing assembly and the View-to-View presentation.

我的问题:

  • 我应该把汇编代码放在哪里?
  • 在哪里可以找到应用范围内的路由器的更多示例?

最佳答案

所以不仅仅是我想知道这个 ;)

让我与您分享我关于 iOS 中 MVP 的其他发现:

Screencast by David Gadd - 它有点长(1 小时 20 分钟)和有点旧(2012 年 12 月),但肯定值得一看。您将在那里看到如何为一个非常小的应用程序实现 MVP(在 AppCode 中)(以及关于如何编写单元测试的非常好的描述)。 David 正在创建的应用程序中的路由器 称为ServiceLocator。不幸的是,我找不到要下载此截屏视频的代码(但可以在观看时创建您自己的此应用程序版本)。

也许还有其他方法可以创建路由器,但是这个截屏视频帮助我对它有了更多的了解。我对 MVP 概念还很陌生,我没有在更大的应用程序中使用它(比 one-screen-let's-see-how-it's-done-app 更大)。很高兴看到 MVP 如何在现实生活中的应用程序中实现...

[编辑]

我刚刚意识到我没有回答您的第一个问题。

根据截屏视频中的应用,router 是一个具有一个类方法的类:

+ (id)resolve:(PresenterTypeEnum)type;

在这个方法的实现中你会发现简单的开关。基于类型,在参数方法中发送将返回演示者的正确实例。

此方法在 viewDidLoad 中调用。拥有演示者实例后,您只需使用 self 设置演示者的 View 。

我希望这个解释是清楚的。无论如何,我强烈推荐观看屏幕截图,那么它应该像 Crystal 一样清晰;)

关于ios - Model View Presenter 和 iOS (Swift) 架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37176912/

相关文章:

ios - 实现 `backgroundColor` 的 `UIView` 的动画 `drawRect`

ios - Swift 和 C# 之间的 RSA 加密

swift - Swift 中的 HTTP POST 请求

c++ - 避免动态转换的架构策略

oop - 系统设计和面向对象设计之间的区别

ios - 使用 URLSession 和 Codable 解析 JSON 数据

ios - 使用 AFNetworking 上传大文件?

ios - 无法链接我的计时器按钮 (Xcode)

ios - Swift - 通过 API 调用将项目添加到数组

ios - 架构 armv 的 undefined symbol