iOS开发之巧用Block和代理方法结合来传值
好久没写技术博客了,因为996的工作周期已经持续好几个月了。每天晚上回家都没有太多精力学习很多其他的东西,而且很多时候是接着完善工作的项目的模块开发。所以博客停歇了这么久,更新率也低了不少,今天补充一篇关于我巧用block传值的技术总结。
需求:在一个输入框,输入几个关键字,弹出搜索的关键字列表。
备注:通过关键字得到的完整的关键字列表的数据是通过网络请求后台返回的数据。
效果:

交互逻辑过程分析:
这个搜索关键字的带输入框的控制器中,输入关键字"河南",然后将这个关键词作为网络请求的参数,请求关键词列表,也就是获取了搜索结果的数组,然后根据这个数组弹出UITableView展示数据,然后接着再输入关键词"理工",也就自然和前面拼接成"河南理工",又是将这个关键词进行网络请求,获得搜索结果数组,同样通过UITableView展示数据。很显然,包含河南理工四个字的结果也就只有"河南理工大学"了。
当然,这个"交互逻辑过程的分析"仅仅是一个业务逻辑过程的分析,但凡有点移动前端的开发经验的程序猿肯定能想到,在这个控制器的Textfield的监听方法里边添加搜索学校关键词的网络请求,然后在请求成功的block回调用,显示UITableView,加载搜索结果的数据数组。
但是这里,我还有一个进一步的需求,那就是这个带输入框的控制器在整个项目中,有很多地方公用,我要提高这个功能的复用性。比如搜索模块的搜索公司关键字,输入"广州",所有的"广州...有限公司"数据列表展示出来。如果按照前面的基本思路"在这个控制器的Textfield的监听方法里边添加搜索学校关键词的网络请求,然后在请求成功的block回调用,显示UITableView,加载搜索结果的数据数组",那么搜索公司关键字,也要在这个Textfield的监听方法里面添加搜索关键字的网络请求?这样根本就没起到软件开发"高内聚,低耦合"的作用。所以进一步的需要思考的就是,能否将这个网络请求公开在外部被调用,我只要求回传的是关键词数组就行,比如外部网络请求学校关键词数组,就传入学校关键词数组,然后通过TableView展示,外部网络请求公司关键词数组,就传入公司关键词数组,然后通过UITableView展示。也就是说,我这个带输入框的控制器只做搜索结果数组的数据展示的职责,网络请求的过程不属于这个功能模块的职责。<业务逻辑的职责抽离,实现解耦>
首先,我们基本知道,搜索结果的数组需要从外部传入,在这里也就是跳转控制器的前面一个控制器传入。这里就需要一个代理方法执行被回调传入,然后在这个代理方法实现的逻辑执行网络请求,但是这时候还有一个问题,那就是网络请求会有时间延迟,如果仅仅通过回调代理方法直接返回结果是不行的,因为代理方法的执行是不会延迟的,也就是直接被回调,然后直接返回,这是代码语言的本性,开发久了并且熟练代理方法和block回传的自然就会有所体会,所以这里网络请求block回传(比如你可能用的是AFN网络请求接口,成功之后block会返回data具体的数据),就不能通过代理方法中的return直接返回了,而是在代理方法再添加一个block再一次回传网络请求block回传的数据。代码如下:


回到带输入框的展示关键词列表控制器的内部:

iOS开发之巧用Block和代理方法结合来传值的更多相关文章
- ios开发UI篇—UIScrollView属性及其代理方法
一.UIScrollView是什么? 1.UIScrollView是滚动的view,UIView本身不能滚动,子类UIScrollview拓展了滚动方面的功能. 2.UIScrollView是所有滚动 ...
- iOS开发之动画编程的几种方法
iOS开发之动画编程的几种方法 IOS中的动画总结来说有五种:UIView<block>,CAAnimation<CABasicAnimation,CATransition,CAKe ...
- IOS开发中数据持久化的几种方法--NSUserDefaults
IOS开发中数据持久化的几种方法--NSUserDefaults IOS 开发中,经常会遇到需要把一些数据保存在本地的情况,那么这个时候我们有以下几种可以选择的方案: 一.使用NSUserDefaul ...
- 【swift,oc】ios开发中巧用自动布局设置自定义cell的高度
ios开发中,遇到自定义高度不定的cell的时候,我们通常的做法是抽取一个frame类,在frame类中预算好高度,再返回. 但是苹果出来自动布局之后...春天来了!!来看看怎么巧用自动布局设置自定义 ...
- 【Swift】ios开发中巧用 description 打印对象时,打印对象的属性
ios开发中我们打印对象的时候,会直接输出对象地址,这样不方便我们开发.我们可以 巧用 description 打印对象时,输出对象的属性 在oc中直接重写即可.swift中需要遵守Printable ...
- iOS开发 - OC - block的详解 - 基础篇
深入理解oc中的block 苹果在Mac OS X10.6 和iOS 4之后引入了block语法.这一举动对于许多OC使用者的编码风格改变很大.就我本人而言,感觉block用起来还是很爽的,但一直以来 ...
- iOS开发 - OC - block的详解 - 深入篇
深入理解oc中的block 苹果在Mac OS X10.6 和iOS 4之后引入了block语法.这一举动对于许多OC使用者的编码风格改变很大.就我本人而言,感觉block用起来还是很爽的,但一直以来 ...
- iOS开发之 -- 判断tableview/scrollview的滑动方法,及导航栏渐变的实现代码
开发的过程中,肯定会用到在视图想上滑动的时候,在导航处做一些操作,比如向上滑动的时候,做个动画,出现一个搜索框,或者其他的操作,那么我们怎么来判断它的滑动方向呢? 首先我们应该知道tableview继 ...
- iOS开发-项目的完整重命名方法,图文教程。
前言:在IOS开发中,有时候想改一下项目的名字,都会遇到很多麻烦.直接改项目名吧,XCODE又不会帮你改所有的名字.总是有很多文件.文件夹或者是项目设置的项.而且都是不能随便改的,有时候改着改着,编译 ...
随机推荐
- 窥探Swift之别具一格的Struct和Class
说到结构体和类,还是那句话,只要是接触过编程的小伙伴们对这两者并不陌生.但在Swift中的Struct和Class也有着令人眼前一亮的特性.Struct的功能变得更为强大,Class变的更为灵活.St ...
- IDDD 实现领域驱动设计-一个简单的 CQRS 示例
上一篇:<IDDD 实现领域驱动设计-CQRS(命令查询职责分离)和 EDA(事件驱动架构)> 学习架构知识,需要有一些功底和经验,要不然你会和我一样吃力,CQRS.EDA.ES.Saga ...
- C# Excel 为图表添加趋势线、误差线
Excel图表能够将数据可视化,在图表中另行添加趋势线和误差线,可对数据进行进一步的数据分析和统计的可视化处理.Excel中的趋势线可用于趋势预测/回归分析,共6中类型:指数(X),线性(L),对数( ...
- jQuery-1.9.1源码分析系列(八) 属性操作
jQuery的属性操作主要包括 jQuery.fn.val jQuery.fn.attr jQuery.fn.removeAttr jQuery.fn.prop jQuery.fn.removePro ...
- CSS padding margin border属性详解
图解CSS padding.margin.border属性W3C组织建议把所有网页上的对像都放在一个盒(box)中,设计师可以通过创建定义来控制这个盒的属性,这些对像包括段落.列表.标题.图片以及层. ...
- CoCreateInstance调用返回代码0x80040154的一种解决方法
引言 前面的一篇博文中总结了开发Windows Thumbnail Handler的一些经验.在公司实际项目中,需要同时针对图片和视频实现缩略图.同时还要在图片和视频文件的顶部加上LOGO.像如下这样 ...
- 异步编程系列第02章 你有什么理由使用Async异步编程
p { display: block; margin: 3px 0 0 0; } --> 写在前面 在学异步,有位园友推荐了<async in C#5.0>,没找到中文版,恰巧也想提 ...
- jQuery点击图片弹出放大特效下载
效果体验:http://hovertree.com/texiao/jqimg/1/ 效果图: 代码如下: <!DOCTYPE html> <html> <head> ...
- php中的登陆login
Login <?php require "../include/DBClass.php"; $username=$_POST['UserName']; $password=$ ...
- Java实现时间动态显示方法汇总
这篇文章主要介绍了Java实现时间动态显示方法汇总,很实用的功能,需要的朋友可以参考下 本文所述实例可以实现Java在界面上动态的显示时间.具体实现方法汇总如下: 1.方法一 用TimerTask: ...