首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

iOS - Swift。MVC到MVVM重构。使用Delegate方法处理IBActions

iOS - Swift 是一种用于开发苹果设备上应用程序的编程语言,它结合了面向对象编程和函数式编程的特性。MVC(Model-View-Controller)是一种架构模式,用于将应用程序的不同组件分离,以实现代码重用和易于维护的目标。MVVM(Model-View-ViewModel)是一种现代的架构模式,它在MVC的基础上引入了ViewModel层,用于管理视图的数据和状态。

在使用Swift进行iOS开发时,从MVC到MVVM的重构可以提供更好的代码可读性、可维护性和可测试性。MVC模式中,View负责展示界面,Model负责数据管理,Controller负责协调View和Model之间的交互。但是,随着业务逻辑的复杂化,ViewController会变得庞大而难以维护。MVVM模式则通过引入ViewModel来解决这个问题。

MVVM模式中,ViewModel充当了Controller和Model之间的粘合剂,它负责处理业务逻辑、管理数据以及与View之间的交互。ViewModel将业务逻辑从View中解耦,使得View变得更加轻量级和易于测试。View通过绑定和观察ViewModel中的属性来更新自身的状态和展示数据。当用户与View交互时,View会触发Delegate方法来调用ViewModel中的相关方法进行处理。

使用Delegate方法处理IBActions是一种常见的设计模式,它使得View能够将用户的交互事件传递给ViewModel进行处理。当用户在View中触发某个操作(比如点击按钮)时,View会调用相应的Delegate方法,并将事件相关的参数传递给ViewModel。ViewModel根据具体的业务逻辑进行处理,并更新数据和状态。这种设计模式使得View和ViewModel能够解耦,提高了代码的可测试性和可维护性。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云移动开发平台:提供了丰富的移动开发工具和服务,帮助开发者快速构建高质量的移动应用。产品介绍链接:腾讯云移动开发平台
  • 腾讯云云服务器(CVM):提供可靠、安全的云服务器,支持灵活的配置和扩展,满足各种规模和需求的应用。产品介绍链接:腾讯云云服务器(CVM)
  • 腾讯云数据库(TencentDB):提供高性能、可扩展的云数据库服务,包括关系型数据库和非关系型数据库,满足各种应用场景的需求。产品介绍链接:腾讯云数据库(TencentDB)
  • 腾讯云云原生应用引擎(Tencent Cloud Native Application Engine):提供全托管的容器服务,简化容器化应用的部署和管理。产品介绍链接:腾讯云云原生应用引擎(Tencent Cloud Native Application Engine)
  • 腾讯云人工智能服务:提供丰富的人工智能技术和服务,包括图像识别、语音识别、自然语言处理等,帮助开发者构建智能化的应用。产品介绍链接:腾讯云人工智能服务

通过使用腾讯云相关产品,开发者可以获得强大的云计算能力和服务支持,提升应用的性能、安全性和可靠性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

App架构设计经验谈:技术选型

iOS开发,语言上是选择Objective-C还是Swift?架构模式用MVC,还是MVP,或者MVVM?下面根据我的一些经验对某些方面做点总结分享。...Objective-C/Swift 我在项目中选择了Swift,主要基于三个原因: Swift真的很简洁,生产效率很高; Swift取代Objective-C是必然的趋势; 目前iOS只有我一个人开发,...不需要顾虑团队里没人懂Swift。...我个人也不太喜欢CocoaPods,使用起来比较麻烦,耦合性也较高,我使用过程中也经常出问题,而且还总是不知道该怎么解决,要移除时也是非常麻烦。...对象 MVC/MVP/MVVM 先分别简单介绍下这三个架构模式吧: MVC:Model-View-Controller,经典模式,很容易理解,主要缺点有两个: View对Model的依赖,会导致View

1.4K10

iOS编码建议

一、ViewController代码结构 在函数分组和protocol/delegate实现中使用#pragma mark -来分类方法,遵循以下结构: // 生命周期 #pragma mark - Lifecycle...,例子: XXAlertView UITableCell:使用Cell做后缀,例子: XXNewsCell Protocol: 使用Delegate或者DataSource作为后缀,例子: UITableViewDelegate...error) return success; 3、构造方法/init方法 当构造方法使用时,虽然用id也可以通过编译,但它应该返回类型是instancetype而不是id。...+VM(也叫MVCS,S是Store的意思,数据处理逻辑)。...MVC+VM:MVC是苹果官方推荐,V专注于视图构建,Model是瘦Model,专注于模型构建,仅持有数据;数据流动全部由Controller来传递,流向清晰,当Controller变复杂时,将数据处理逻辑剥离出来成为

36910
  • 开源项目——『看知乎』iOS

    MVVM MVC 是个非常经典的概念,它最早来自于 SmallTalk,四人帮的《设计模式》在引言中就介绍了 MVC——通过“订阅/通知”协议来分离 Model 和 View;View 使用 Controller...于是 Controller 成了 MVC 的中心,这种思想也是 iOS 开发中的主流思想,斯坦福 iOS 公开课上白胡子老头放过一张解释 MVC 的图: ?...05年的时候微软为设计 WPF 而提出 MVVM 模式,主要思想是基于Model 和 View 的数据双向绑定,通过响应事件来处理用户的操作。...于是有人提出在 iOS使用 MVVM,不过 Cocoa Touch 跟 WPF 是不一样的,所以大多数时候在 iOS 中的 MVVM 其实是 M-VM-V-C,也就是在 View 和 Model 之间加了个...关于面向协议编程 Swift2之后可以用 extension 给协议方法或者属性加上一个默认实现了,这使得 Swift 可以用协议模拟 Ruby 中用 module 实现的 mixin 效果,也就是通过协议扩展某个类的功能

    1.2K50

    春招路上孤独的iOSer的心路历程(面经)

    2020年 1-20 1、2面 一面 1 tableview 重用机制 滑动性能调优方法 2圆角效率问题 离屏渲染 3calayer 与uiview 区别 为什么这么设计 4swift 消息机制 5 多线程如何保证线程安全...6 mvvmmvc的区别 7 你认为mvvm最大的好处 8 如何比较两个浮点类型 为什么要这么做 9 进程和线程的区别 为什么切换线程代价小 10 如何实现进程间的通信 11 信号量 管道 共享内存...与mvc 项目亮点 野指针处理 内存管理 深拷贝与浅拷贝 如何进行类的深拷贝 网易有道 2-21 一面 一面 70分钟 1.聊了下目前的情况以及经历 2.事件传递与响应链 3.runtime机制聊一下...mvcmvvm理解 了解哪些数据结构 散列表实现原理 iOS内存管理方式 了解哪些网络协议 http 传输层用的哪个协议,版本问题 2-27 网易有道 hr+OC 问了一些比较常规的问题 蘑菇街 3-...除了gcd group之外 其他方法 信号量与锁的区别 mvcmvvm的区别 为什么从swift开始学 如何学习iOS的 有什么要问的?

    2.5K20

    iOS 面试策略之系统框架-设计模式

    功能是完成了,然而效率上不是很高,代码逻辑在日后也可能需要返工重构。 [1240] 我个人认为,突破这个瓶颈的捷径就是掌握设计模式。...注意,delegate 一般声明为 weak 以防止循环引用。 5. 什么是观察者模式(Observer)?...3) 在制定的回调函数中,处理收到的更改通知。 在 Swift 4 中,我们不需要再手动的回收 observer 了。...其最经典的使用方法就是用 UserDefaults 来读写,同时配合栈可以存储一系列状态。它经常用于初始化、重启、App 前后台状态改变等地方。...文章这里就结束了,感谢你的观看,只是有些话想对读者们说说: iOS开发人群越来越少,说实在的,每次在后台看到一些读者的回应都觉得很欣慰,至少你们依然坚守iOS技术岗…为了感谢读者们,我想把我收藏的一些编程干货贡献给大家

    1.6K20

    iOS开发笔记(一)

    前言 iOS开发笔记(一) iOS开发笔记(二) iOS开发笔记(三) iOS开发笔记(四) 《开发笔记》系列记录一些开发中遇到的问题以及思考。...这种膨胀往往发生在页面内容复杂、交互较多的页面控制器,需要较多的delegate和target-action代码。 随之而来的是代码零散化:逻辑相同的代码零散在各处。...于是,尝试在iOS平台使用MVVM: 通过KVO来实现MVVM是其中一种选择,但是KVO的代码同样会聚在observe的方法。 希望达到的效果是:数据与页面一一对应,一个业务逻辑代码尽量聚合。...仔细体验ReactiveCocoa+MVVM后,总结如下: MVVM的核心是数据绑定、代码解耦,这与传统的MVC并不相斥,在对现有的MVC代码进行优化时,可以为View新建ViewModel来控制显示...额外的文章:ARC下的循环引用 4、performSelector的内存泄漏 在看完第三点的内存管理方式后,我们知道在ARC(自动引用计数)调用方法,编译器需要知道如何对返回值进行处理

    95270

    MVVM伪框架结构和MVC中M的实现机制

    p/02d6397436dc】 一直都有人撰文吹捧MVVM应用开发框架,文章把MVVM说的天花乱坠并且批评包括iOS和android所用的MVC经典框架。...MVC框架图 一个很可惜的事实是不管是Android和iOS都只对C和V两部分进行了标准的定义和实现:Android的视图部分的实现是定义了各种控件以及通过XML文件来组装视图布局界面,iOS的视图的实现也是定义了各种控件以及通过...然而这为我们的开发者在使用MVC框架开发应用时埋下了隐患。...而是把这部分代码挪模型层了(大家来看啊,我终于应用上了MVC框架了!)。 好了!瘦身第一步成功。但是但是,问题还在啊,我的业务逻辑还是一大片在C层啊,看来MVC这种框架也不过如此啊!...方法有很多种: 我们可以为M层的通知逻辑定义Delegate协议,然后让C层去实现这些协议,然后M层提供一个delegate属性来赋值处理业务通知的对象。

    80330

    iOS开发常用之开发资源

    开发资源 豆瓣iOS开源库列表 - 豆瓣iOS开源库列表,很多开源项目。 iOS-Core-Animation-Advanced-Techniques - 中文版iOS高级动画技术。...RemoteControl - 从Xcode内部控制您的iPhone进行端端测试。 MVVM介绍 - 替换MVC的开发模式。 第三方接口 - 基本所有第三方接口都在这,再也不用那麻烦去找了。...提高iOS开发效率的方法和工具 - 提高iOS开发效率的方法和工具。 禅与Objective-C编程艺术 - 禅与Objective-C编程艺术(禅与Objective-C工艺的艺术中文翻译)。...Developing_iOS_8_Apps_With_Swift - 用Swift开发iOS 8应用程序字幕简体中文翻译项目(斯坦福白胡子老头swift教学视频)。...Swift-On-iOS - JohnLui的SwiftiOS代码仓库上。 30DaysofSwift - 30DaysofSwift自学iOS - 三十天三十个Swift项目。

    93420

    iOS应用架构谈 view层的组织和调用方案 pragma mark - life cyclepragma mark - life cyclepragma mark - getters and set

    方便View布局的小工具 MVCMVVM、MVCS、VIPER 本门心法 跨业务时View的处理 留给评论区各种补 总结 View代码结构的规定 架构师不是写SDK出来交付业务方使用就没事儿了的,每家公司一定都有一套代码规范...每一个delegate都把对应的protocol名字带上,delegate方法不要到处乱写,写到一块区域里面去 比如UITableViewDelegate的方法集就老老实实写上#pragma mark...因为天猫在最近才切换到支持iOS6,所以之前天猫都是用Frame布局的,在天猫App中,首页,范儿部分页面的布局就使用了这些方法使用这些方便方法能起到事半功倍的效果。...在iOS领域大部分MVVM架构都会使用ReactiveCocoa,但是使用ReactiveCocoa的iOS应用就是基于MVVM架构的吗?...前面扯了那么多,其实归根结底就是一句话:在MVC的基础上,把C拆出一个ViewModel专门负责数据处理的事情,就是MVVM

    96480

    被误解的 MVC 和被神化的 MVVM(二)

    相对于 MVC 的历史来说,MVVM 是一个相当新的架构,MVVM 最早于 2005 年被微软的 WPF 和 Silverlight 的架构师 John Gossman 提出,并且应用在微软的软件开发中...所以,MVVM 模式有些时候又被称作:model-view-binder 模式。 具体在 iOS 中,可以使用 KVO 或 Notification 技术达到这种效果。...MVVM 的神化 在使用中,我发现大家对于 MVVM 以及 MVVM 衍生出来的框架(比如 ReactiveCocoa)有一种敬畏感。...MVVM 的作用和问题 MVVM 在实际使用中,确实能够使得 Model 层和 View 层解耦,但是如果你需要实现 MVVM 中的双向绑定的话,那么通常就需要引入更多复杂的框架来实现了。...看看 Swift 语言带来的众多函数式编程的特性,就你知道这多 Cool 了。

    33220

    技术趋势:是什么让MVC悄然消失的?

    ( 摘自 维基百科-MVC ) 模型(Model) 用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。...它处理事件并作出响应。“事件”包括用户的行为和数据 Model 上的改变。 Struts和SpringMVC曾经是MVC双雄。 那是什么导致MVC模式被淘汰了呢?...当前端工程师拿走MVC的职责之后,自然会把MVC模式改成更适合前端的模式:MVVM。...MVVM(Model–View–Viewmodel)也是一种软件架构模式,它必将取代MVC,或者说的好听一些,它是MVC基础上演化而来。...福报修多了的结果就是,不行了就重构你,重构不了就换掉你。 来一张斯坦福老头经典的MVC架构图。 ? 所以为了解决这个问题,MVVM就闪亮登场了。

    82420

    iOS架构设计:揭秘MVC, MVP, MVVM以及VIPER

    iOS使用MVC时感觉怪怪的?对切换到MVVM有疑虑?听说过VIPER,但不知道是否值得? 往下看,你将会找到这些问题的答案,如果还有疑问,请在评论区留言。...你将了解iOS环境下如何进行系统架构设计。我们将简单回顾一些流行的框架,并通过实践一些小例子来比较它们的理论。...例如:网页完全加载后,一旦你按下链接,就导航其他地方。 虽然在iOS应用用传统的MVC架构也可以实现,但这并没有多大意义,由于架构问题 ——三个实体是紧耦合的,每个实体和其他两个通信。...例如:你开始的时候使用MVC,然后突然意识一个页面在MVC模式下的变得越来越难以维护,然后就切换到MVVM架构,但是仅仅针对这一个页面。...并没有必要对哪些MVC模式下运转良好的页面进行重构,因为二者是可以并存的。

    1.4K20

    写给iOS小白的MVVM教程(一): 从MVCMVVM之一个典型的MVC应用场景

    开篇之前,你可以先到这里下载本文的示例工程: https://github.com/ios122/ios122 在这一篇章里,我会分别使用我所理解的MVC与MVVC两种模式来完成同一个应用场景,以期帮助那些熟悉传统...MVC模式代码的iOS攻城狮,能更好理解MVVC.限于篇幅,将MVCMVVM拆分为两个部分,今天要说的是一个典型的MVC的应用场景,为基于MVCMVVM重构做个基础.这篇文章着重进行了接口准备,必须的知识点的说明等内容...版本实现: 类似的代码,你不知道敲过了多少遍 技术要点 下面列出将要用到的技术点,如有你不熟悉的,可点击对应链接访问: 使用 AFNetworking 来处理网络请求; 使用 MJExtension实现...JSON数据模型的自动转换; 使用 MJRefresh 实现下拉刷新与上拉加载更多的效果; 使用 Masonry 进行AutoLayout布局; 使用 MBProgressHUD 优化页面加载时的进度提示...获取数据成功后,自动刷新视图;获取失败,则给出错误提示; 这一部分,涉及的变动较多,我就直接贴代码了.你会注意View和数据已经交叉进行了,很乱的感觉.而这也是我们想要使用MVVM重构代码的重要原因之一

    1.9K70

    iOS - 开发1年后对MVC新的理解

    & dataSource 代理方法 导致了VC的沉重 @end 问题来了回到工程项目需求,每个cell都有增加减少按钮 而且需要有选中效果在View层.意味着MVC架构模式中 我在View层对Model...self.tableView.dataSource = self.dataSource; [self.dataSource addDataArray:[SingleManager manage].userListArr]; } @end 这减少了...-> 《iOS-使用GCD单例创建管理对象》 第二种玩法是通过Swift混编,我们来对比一下Model层的不同 定义 OC层 @interface Model : NSObject @property...MJExtention封装好的三方框架来解析数据 mj_objectArrayWithKeyValuesArray Swift层 通常解析数据会根据后台的数据结构返回来的JSON进行匹配 swift...架构 (Model和UI之间的消息通讯方式) 在上面我们把DataSource麻烦的代码交给了封装的DataSource类中,但是还剩下一个Delegate代理没解决 MVC (最快上手架构) MV-Protocal

    1.2K71

    技术趋势:是什么让MVC悄然消失的?「建议收藏」

    ( 摘自 维基百科-MVC ) 模型(Model) 用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。...它处理事件并作出响应。“事件”包括用户的行为和数据 Model 上的改变。 Struts和SpringMVC曾经是MVC双雄。 那是什么导致MVC模式被淘汰了呢?...当前端工程师拿走MVC的职责之后,自然会把MVC模式改成更适合前端的模式:MVVM。...MVVM(Model–View–Viewmodel)也是一种软件架构模式,它必将取代MVC,或者说的好听一些,它是MVC基础上演化而来。...福报修多了的结果就是,不行了就重构你,重构不了就换掉你。 来一张斯坦福老头经典的MVC架构图。 所以为了解决这个问题,MVVM就闪亮登场了。

    74620

    写给iOS小白的MVVM教程(序)

    这几天,需要重构下部分代码,这里简要记录下.但是涉及的技术要点还是很多,所以分为多个篇章叙述.此教程来源于,并将于应用于实践,不做过多的概念性阐释和争论.每个篇章都会附上实际的可执行的代码.因涉及的技术点...,有许多探索的部分,暂定每两天更新一个篇章.欢迎广大iOS同行,批评指正!...教程内容,按更新顺序排序 从MVCMVVM: 结合实际的例子,提出并应用一种从MVC迁移到MVVM的可行性方案....使用MVVM模式,实现iOS122.com网站的博客阅读: 会涉及使用Leancloud做服务器端,使用marddown库解析markdwon内容,一个更加实际的MVVM各技术细节的具体实现技巧....* * 下次调用 get:success:failure 方法时,会获取下一页的数据. */ -(void) nextPage; @end

    790100

    携程、阿里、京东、腾讯iOS春招面试过程以及面试题总结!

    然后秋招的时候由于实习比较忙,所以基本上就只投了秋招正式批,内推要么没投,要么踩线投,直接没了音信…… 楼主iOS开发,主要用的Swift语言。下面上一些面经,希望能够对大家有那么一点点帮助。...请写出程序输出结果 对数组 "12-12","12-11", "12-11", "12-11", "12-13", "12-14" 去重同时进行排序 使用递归方法计算991相加的计算结果。...= 反正就是使用优先级就解决了) 二面 说一说 MVCMVVM 的区别,以及各自的优缺点。 如何将 MVC 改造成 MVVM ?在MVVM中,网络请求、缓存处理的部分应该放在哪个模块?...为什么说Swift是面向协议的语言?使用 Protocol 有什么好处? 比较一下 Swift 和 Objective-C 在语言层面上的安全性?...二面 反转字符串 判断整数是否为$2^n$ 一个m*n的棋盘,有些格子不能走,如何找到左上角右下角的最短路径? iOS 按下 Home 键之后会发生什么? c++中内存分配是怎样的?

    1.5K00

    闭包是个好东西,巧用闭包实现数据绑定

    前言 当你在工作中需要开发一个新的应用程序时,首先你会去考虑使用哪种设计模式,是 MVC 呢还是 MVVM?...当然这话放在今儿个说,大家肯定会一致的选择 MVVM,因为相比 MVC 模式,MVVM 模式有太多的优势,譬如说移除了在 View Controller 中的业务逻辑,将这部分代码放在 View Model...以往我们再处理异步数据的时候,往往都会通过 Delegate 或者 Notification 等方式,待收到异步数据后再去刷新 UI。...这样处理数据并没有毛病,但是如果遇到 UI 上有大量的控件需要不定时更新数据时,那通过 Delegate 和 Notification 的方式就会显得不够优雅,所以我们才会讲到数据绑定这个知识。...优雅的处理网络数据,你真的会吗?

    49010

    老司机 iOS 周报 #78 | 2019.08.05

    老司机 iOS 周报,只为你呈现有价值的信息。 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。...swift-best-practices 就告诉了你答案。内容包括但不局限于这几点:基础 MVVM 结构、通用控制器类型、文档的编写等。...Cycript 调试程序 MachOView 在 Cycript 和 LLDB 中使用私有的方法调试 使用 NSInvocation 调用方法 查看 App 中的字符串 UIDebug 工具 使用上述技术手段...Rule-based logic in Swift @享耳先森:对于系统设计而言,只考虑技术架构的话其实相对简单(比如使用 MVVM 还是其他架构模式),虽然架构模式非常重要,但我们还是可以通过对一些次要代码或结构进行改进来提升代码质量...本文通过 URL 匹配这一点入手,介绍如何将原来难以维护的代码抽象出一些规则来进行重构Swift 5 之后 "Method Swizzling"?

    1.2K30
    领券