Tag: mvvm

Swift中MVC的替代方法:基本MVVM结构

MVVM(模型-视图-视图-模型)和MVC(模型-视图-控制器)是iOS设计模式。 Apple将设计模式定义为设计的模板,以解决特定情况下的普遍性重复性问题。 它是一种抽象工具,在诸如体系结构和工程以及软件开发等领域非常有用。 在MVVM中,我们在不同的MVC层之间添加了一个称为ViewModel的层。 它由引用我们要表示或交流的实例的类或结构组成。 假设我们要列出服务的结果。 在此示例中,我将列出新闻来源。 为了做到这一点,我创建了Source模型类: 类来源{ var id:String 变量名:String var说明:String init(id:String,name:String,description:String){self.id = id self.name =名称 self.description =说明 } // … 如果我们想在ViewController中列出我们的Sources,我们可以使用一个封装Controller所需信息的类。 我们称它为SourceViewModel: 类SourceViewModel {var id:String 变量名:String var说明:String init(source:Source){self.id = source.id self.name =源名称 self.description = source.description } // … 但是,控制器需要的信息不是来源的信息,而是来源列表的信息。 因此,我们需要诸如更高级别的视图模型,源(列表)视图模型之类的东西。 创建它: 类SourceListViewModel { private var webservice:Web服务 私有(一组)var sourcesViewModel:[SourceViewModel] = [SourceViewModel]() 私人var完成:()->()= {} […]

简要介绍:实现MVVM-C模式

您可以阅读它或尝试与我们创建一个简单的pp。 我们建议使用后者。 我们已经发布了有关MVVM模式的文章: MVVM体系结构:分步指南 ViewModel有什么不同。 essays.decode.agency 以及关于使用协调器的一项: 与协调员配合应用流程 向庞大的ViewController告别。 essays.decode.agency 因此,唯一合乎逻辑的下一步就是将两者放在一起,并在一个实际示例中引导您实现MVVM-C模式。 我们将其称为“红色和绿色”应用程序。 基本结构 我们将在语义上将“红色与绿色”应用程序的屏幕分组为单位。 每个单元包括以下组件: 视图 ViewController 视图模型 ViewModelProtocol ViewModelProtocol用于进一步封装ViewController和ViewModel之间的通信。 我们的应用程序有一个主屏幕,可以选择红色或绿色。 选择红色将我们带到红色屏幕,绿色将我们带到绿色屏幕。 每个VC通过两个组件初始化: mainView —定义屏幕的可视部分并在其上配置操作 viewModel —分离UI部件的逻辑; 在MVVM-C模式中,它还负责与协调器进行通信 让我们深入了解并定义主屏幕。 我们将其称为MainVC: 在LoadNibFromEnum中,您会看到我们使用了自定义函数来调用Nibs: 视图是通过相应的XIB定义的,其中有两个按钮,这些按钮在屏幕上显示,因此可以定义对它们的操作。 ViewModelProtocol定义了可以在VC-VM关系上执行的所有动作。 在这种特定情况下,我们只需要在上述两个按钮上定义动作,因此我们将这样做: 可以以多种方式定义动作,但是出于代码易读性的考虑,我们仅通过块定义动作。 ViewModel可以是符合ViewModelProtocol的类或结构,这意味着在ViewModelProtocol中定义的所有方法或动作也必须在ViewModel中定义。 然后,我们最终可以将视图中的按钮动作与ViewModel中定义的动作连接起来: 我们的MainView是公开的,因此我们可以在viewDidLoad中的按钮上定义所有动作,并将每个动作转发到ViewModel中的块。 这样,ViewController不必知道导航接下来会发生什么,并且无需承担控制UI的责任。

Swift Talk:使用RxSwift的高级MVVM [第5集] UITableView绑定

在RxSwift的热身剧集中,我们介绍了使用RxSwift和RxCocoa的UITableView绑定,这将导致删除大量样板代码和从ViewModel到ViewController的委托。 反过来,这会使整体代码更简洁,更清晰。 你还在等什么? 使用RxSwift观看MVVM的最新一集。 观看其他TOP编程教程,网址为: 轻松编写代码 来自行业专家的真实经验的视频教程。 Laravel,AngularJS,iOS,Android,NodeJS… youtube.com 请关注我们: http://letscodeeasy.com www.facebook.com/letscodeeasy https://twitter.com/letscodeeasy

iOS中的Model-View-ViewModel模式

MVVM设计模式的组成部分 要了解ios中的mvvm,我们将举一个简单的示例,从url下载用户数据并将其显示在UI上。 用于示例应用程序的网址:https://jsonplaceholder.typicode.com/todos 响应: [ { “ userId”:1 “ id”:1 “ title”:“ delectus aut autem”, “已完成”:false }, { “ userId”:1 “ id”:2 “ title”:“ quis ut nam facilis et officia qui”, “已完成”:false }, { “ userId”:1 “ id”:3, “ title”:“ fugiat veniam minus”, “已完成”:false } MVVM架构 模型 :模型对象封装了特定于应用程序的数据,并定义了处理和处理该数据的逻辑和计算。模型对象可能与其他模型具有一对一或一对多的关系。 ViewModel :ViewModel处理驱动视图的业务逻辑,它拥有如上图所示的数据模型,由View / viewcontroller拥有,并提供要在UI上显示的输出。 View / ViewController […]

Swift Talk从SwiftyJSON Advanced MVVM开始Alamofire [第7集]

Swift讨论将继续进行有关高级MVVM的讨论,并介绍使用Alamofire进行网络连接以及使用SwiftyJSON进行JSON解析的方法,以及用于在Swift 4中处理网络的两个出色的第三方库。 RxSwift即将上映。 很有趣,不是吗? 订阅并注意更多乐趣! 请观看以下链接提供的所有剧集: 第1集-https://youtu.be/fH9paWpCvQsEpisode 2- https://youtu.be/qLbUzwZrQjcEpisode 3 — https://youtu.be/qLbUzwZrQjcEpisode 4 — https://youtu.be/b1GadsUtB9s第5集- https://youtu.be/EZtCOQyRK7w第6集- https://youtu.be/T0yT6J_Mp9U 观看其他TOP编程教程,网址为: youtube.com/c/letscodeeasy 请关注我们: http://letscodeeasy.com www.facebook.com/letscodeeasy https://twitter.com/letscodeeasy

使用RxSwift和ViewModel进行TableView搜索

让我们使用结合了MVVM的RxSwift做一些繁重的工作。 使用UISearchController进行TableView搜索,并使用ViewModel中的Variable绑定搜索文本。 我说过重吗? 我们没有这样做,RxSwift却这样做。 了解过滤后的数组如何与源数组绑定,进而以最少的代码即时更新tableview。 如果您喜欢这些教程的质量,请喜欢,订阅和分享。 请观看以下链接提供的所有剧集: 第1集-https://youtu.be/fH9paWpCvQsEpisode 2- https://youtu.be/qLbUzwZrQjcEpisode 3 — https://youtu.be/qLbUzwZrQjcEpisode 4 — https://youtu.be/b1GadsUtB9s第5集- https://youtu.be/EZtCOQyRK7w第6集- https://youtu.be/T0yT6J_Mp9UE第7章- https://youtu.be/ur-U9nzazbc 观看其他TOP编程教程,网址为: youtube.com/c/letscodeeasy 请关注我们: http://letscodeeasy.com www.facebook.com/letscodeeasy https://twitter.com/letscodeeasy

MVVM-2:深度学习

在这里,我们又回到了MVVM系列的第二部分。 如果您不熟悉MVVM,则希望阅读本系列的第一个博客MVVM — 1:一般讨论,以使MVVM更加清晰。 为什么只留下一个简单的MVVM演示? 如所承诺的那样,这将是在MVVM公园中进行的详细游览,因此是一个大博客;)。 所以等我直到最后。 你会学到什么? 在实时iOS应用程序开发场景中使用MVVM。 建立复杂的UI尊重MVVM概念。 MVVM中遇到的常见问题并巧妙地解决了这些问题。 激动…… MVVM的缺点: 在探讨主要概念之前,让我们回顾一下MVVM的常见缺点: 难以在嵌套视图和复杂UI中管理视图模型及其状态。 各种MVVM组件和数据绑定之间的通信可能很痛苦。 视图和视图模型的代码可重用性很困难。 初学者的MVVM很难使用。 我们要建造什么? 我们将构建一个应用程序,该应用程序将获取您的当前位置并显示附近的自动取款机,咖啡馆,夜总会和您周围的餐馆之类的地方,因此,如果您想出去玩,这对您来说真的很容易:)。 没有比NEARBY更好的名字了。 该应用程序的外观如下: MVVM的基本经验法则: 视图模型归视图所有 , 模型归视图模型所有 。 View Model仅负责处理输入到输出以及驱动UI所需的逻辑。 视图模型不应修改UI。 该视图应仅负责UI处理。 视图不应与数据模型交互,反之亦然。 在构建我们的应用程序时,我们将尝试维护MVVM的这些基本规则。 因此,不浪费时间,让我们进入竞技场。 样例代码: 您可以下载示例代码,并在MVVM-2文件夹下打开“ Nearby”项目。 代码流: 该项目包含三个页面:主页,位置列表和位置详细信息页面。 为了便于理解,每个页面都被视为一个单独的模块。 对于此讨论,我们将分析HomePage模块。 其他模块的设计类似。 主页模块 通过分析HomePage设计,我们可以将页面中的视图分离为主页视图,分页单元格和带有集合视图的表格单元格。 此外,分页单元格具有水平滚动视图,该滚动视图具有显示位置细节的视图。 如果您考虑如何管理所有视图模型并在组件之间划分职责,您会发现MVVM使情况变得更加糟糕,特别是对于初学者而言。 可能有多种方法来构建下面的UI,但是对于我们的讨论,让我们根据下图分离视图 : 闻到腥味……。 是的,对于MVVM的初学者而言,上述隔离可能是一个错误和时间杀手。 那么,MVVM将导致哪些问题: 管理多个嵌套视图和视图模型 。 通过驱动UI的不同业务逻辑查看可重用性。 (例如,单个CollectionTableCell用于具有不同业务逻辑的多个单元。) […]

一种使用MVVM的表格视图的POP方法。

首先是第一件事。 POP代表面向协议的编程。 POP上有很多现成的资料,因此我将不对其进行详细介绍。 MVVM代表模型视图视图模型。 这是一种设计模式,其中有类或类型,这些类或类型可以分为三类,即模型,视图和视图模型。 这是一篇很棒的文章 了解MVVM。 我选择MVVM而不是MVC(模型视图控制器),因为MVC通常会导致整体式Massive View Controller。 现在开始。 我们首先从为tableviewcellmodel定义协议开始。 tableviewcellmodel将包含该单元格的标识符。 它还将包含其他数据以配置单元。 我们还需要可以使用此tableviewcellmodel配置的tableviewcell。 因此,我们还定义了可配置单元协议。 在这里,无论我们使用POP布局的任何框架都可以通过非常干净的表视图数据源来实现。 我们创建RBConcreteTableViewController ,它是UITableViewController的子类。 它具有RBTableViewModel类型的属性tableViewModel,这意味着它可以使用符合RBTableViewModel的任何类型。 我们重写viewDidLoad()以使用tableViewModel配置tableView。 然后,我们获得了UITableViewDatasource方法的样板代码。 如您所见,该代码更加简洁。 您可以更早地跟踪错误。 我们还避免使用非常庞大的视图控制器。 通过为可配置表视图创建协议,可以出于一致性目的而改进此代码,但是您可以通过遵循上述可配置单元协议的模板来轻松实现此目的。 此处提供了此POP方法的源代码。 您可以继续改进自己的实现。 你喜欢这篇文章吗? 也许尝试以下方法之一: 在Swift中使用ExpressibleByArrayLiteral简化生活 驯服宽松的通知 断点作为调试内容提供者 在核心数据中使用可变类型作为可转换属性的危险 请提供任何反馈以进行改进。 我的TapChief个人资料如下:

使用MVVM设计模式构建新闻应用程序

在我最新的Udemy课程“ 使用Swift构建真实的iOS应用 ”中,我演示了如何实现与NewsAPI.org集成的完整News App。 这篇文章重点介绍了与使用MVVM设计模式实现iOS应用有关的一些重要概念。 设置NewsAPI帐户 在深入研究实现之前,请确保您具有NewsAPI帐户。 NewsAPI.org帐户将为您提供一个apiKey,它是对API进行成功请求所不可或缺的。 为了简单起见,我们将仅从API中获取并显示头条新闻。 顶部标题的链接如下所示: https://newsapi.org/v2/top-headlines? country =我们 &apiKey = yourapikey 这将导致以下JSON响应。 注意 :由于这是新闻,您的实际JSON响应可能有所不同。 但是结构保持不变。 Web服务和模型 设置NewsAPI帐户后,我们可以发出请求并将JSON填充到我们的模型中。 查看JSON响应,您会发现我们对articles数组内的项目感兴趣。 为了获得这些项目,我们必须对文章进行解码。 我们的Article类如下所示: 我真的希望您喜欢这篇文章! 如果您想了解有关使用MVVM设计模式创建iOS应用的更多信息,请查看以下我的课程: https://www.udemy.com/building-real-world-ios-apps-using-swift/?couponCode=MEDIUM [源代码] 谢谢,祝您编程愉快!

使用协议和MVVM的可重用视图布局

想法💡 之所以将其命名为“可重用视图布局..”而不是简单地命名为“可重用视图..”,是因为在这里我不是指视图的对象级可重用性。 相反,我将讨论如何在protocol和MVVM的帮助下重用视图布局。 在这个过程中,我将分享我们如何使用一个protocol概述一个视图的界面, 基本不同的配置状态 ,该protocol将使我们能够将不同的view-models注入到一个视图中。 换句话说,这里的想法是设计视图布局的数据不可知模型。 MVVM 在继续之前,让我们先简单了解一下MVVM 。 这是目前最令人困惑的设计模式之一,因此只需要确保我们在同一页面上即可。 这是一种设计模式,其中,我们使视图依赖于称为视图模型的中间模型对象。 这个视图模型获取一些数据(与网络或持久层无关),并应用一些装饰方法,这些方法最终被视图消耗。 例如,如果我们有一个配置文件视图类– ProfileView ,我们可以创建它的视图模型ProfileViewModel进行配置并保存其状态。 class ProfileView: UIView { var nameLabel: UILabel! func configure(with model: ProfileViewModel) { nameLabel.text = model.nameTitle } } struct ProfileViewModel { var nameTitle: String { return “Profile Title” } } 捆绑 我们可以看到,使用MVVM时, ProfileViewModel与ProfileViewModel结合在一起ProfileViewModel进行任何类型的配置。 如果您的视图在整个生命周期中仅具有一种视图模型,则此方法效果很好。 现在,我们要重用ProfileView类,该类应该能够显示Owner配置文件和Guest配置文件。 枚举 为了支持这一点,我们可以将ProfileViewModel转换成一个所有者和来宾情况不同的枚举。 enum ProfileViewModel { […]