swift中delegate与block的反向传值
入门级
此处只简单举例并不深究,深究我也深究不来。对于初学者来说delegate或block都不是一下子能理解的,所以我的建议和体会就是,理不理解咱先不说,我先把这个格式记住,对就是格式,delegate或block都是高度格式化的,用的多了自然而然不理解也就理解了
场景:从 B
-> A
传值,开发中必不可少的业务需求,经常会有在B
页面干完一些事情之后告诉A
页面或者传值到A
页面。
下面这个例子就是当B
页面dismiss
时将值传到A
页面
Block
1. 在B中声明一个blocktypealias TestBlock = (String)->()
2. 持有一个block变量var blo: TestBlock?
3. 调用self.blo?("It is block test")
4. 在`A`中需要接受值的地方let b = B()b.blo = {str in print("test block---\\(str)")}
delagete
很多初学者一接触到delegate
简直一头雾水,傻傻分不清到底谁是代理。 这里我告诉你一句话,记住了就再也不会有这个疑惑了! 你也不用管谁是代理,这些就是一个叫法而已。
谁要传值谁就拥有代理属性
比如我们这个场景,B
要给A
传值,那B
就拥有代理属性, A
就是B
的代理,很简单吧!
有代理那就离不开协议,所以第一步就是声明协议。在那里声明了?谁拥有代理属性就在那里声明,所以代码就是这样的:
- 在
B
中声明一组协议
protocol BDelegate {func testDelegate(str: String) -> Void}
- 在
B
中持有delegate属性
weak var delegate: BDelegate?
- 调用
self.delegate?testDelegate("It is delegate test")
- 在
A
中需要接受值的地方
let b = B()
b.delegate = self
// 调用B的协议方法
func testDelegate(str: String) -> Void {print("test delegate---\\(str)")
}
swift中delegate与block的反向传值相关推荐
- iOS 中delegate的理解与使用(传值)
之前做了半年的iOS,刚入了门,又被拉去转战java,现在iOS的那位大佬离职了,又被弄过来维护app,之前对于iOS中的delegate一直都是半知半解,所以刚好趁着这个机会把我所了解的记下来,以便 ...
- 反向传值的几种常用方法
最近项目完成的差不多了,闲下来的时间突然心血来潮想自己写写以前没用过的方法.这里就包含了几种常见的反向传值的方法. 之所以现在专门自己写反向传值的博文记录,是因为之前几乎没怎么用到这些反向传值的方法, ...
- 使用代理进行界面之间的反向传值
目标:在两个独立的控制器的界面之间进行反向传值 关键技术:代理 代码编写及运行环境:Xcode6.4 / 模拟器8.4 语言:Objective-C 注:使用纯代码实现,不使用xib/storyboa ...
- 解决Swift中present(uiImagePickerController,animated: true,completion: nil)闪退的问题
swift中开发选择图片上传,会使用到Tap Gesture Recognizer控件,对应 UITapGestureRecognizer API,以下是代码示例(取自IOS developer li ...
- 探索 Swift 中的 MVC-N 模式
作者:Marcus Zarra(twitter:@mzarra) Marcus 将会为大家介绍一种设计模式,他曾经在那些需要从互联网进行大量频繁数据请求的 iOS 应用当中使用此设计模式.这个设计采用 ...
- 怎样在swift中创建CocoaPods
本文由yake_099(博客)翻译自raywenderlich,作者:Joshua Greene 原文:How to Create CocoaPods with Swift 你可能对一些比较著名的开源 ...
- Swift 中的 @autoclosure
由于种种原因,掘金等第三方平台博客不再保证能够同步更新,欢迎移步 GitHub:github.com/kingcos/Per-.谢谢! Date Notes Swift Xcode Source Co ...
- iOS 代理反向传值
iOS 代理反向传值 在上篇博客 iOS代理协议 中,侧重解析了委托代理协议的概念等,本文将侧重于它们在开发中的应用. 假如我们有一个需求如下:界面A上面有一个button.一个label.从界面A跳 ...
- 27.怎样在Swift中声明typedef?
在OC中,我们经常会用typedef关键字来声明Block,例如: /*** 通用的空闭包类型,无参数,无返回值*/ typedef void (^GofVoidBlock)(void); 在Swif ...
最新文章
- “编程不规范,同事两行泪!”
- mysql 多列索引的生效规则
- 23、java中的网编基础
- Java实现C语言select函数_一道面试题目,分别用sql 和java,c++, c语言实现,
- django-form and fields validation
- C语言逻辑运算符 - C语言零基础入门教程
- 平扫加重建什么意思_在这款“奸商模拟器”里,帮助战场老兵重建家园吧!
- 默认权限umask、文件系统权限、特殊权限
- 时间管理表 - 《月总结计划表》
- ubuntu16.04安装微软kinect V1驱动
- android 呼吸灯权限_Android 呼吸灯流程分析
- NAT alg 和 ASPF
- win7 64位 纯净版旗舰版202104
- ode45 matlab 出错,Matlab中ode45求解微分方程组出错。
- C:\Windows\system32>net start MySQL 发生系统错误 1058。 无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动。
- 代码随想录——求根节点到叶节点数字之和
- WSL2设置局域网网访问
- 大数据毕设/课设 - 水质情况实时监测预警可视化设计与实现
- 图片优化对SEO有着重要作用
- ae2018怎么打开2019_ae2018中英文切换的方法
热门文章
- python采集cpu信息
- ubuntu下vim的配置
- 行列式介绍及Eigen/OpenCV/C++的三种实现
- layui如何存在多个弹窗_layui常见弹窗使用方法
- #实现互联网聊天_局域网内两台电脑如何实时语音聊天通话
- 机器人瓦力船长机器人_警察“瓦力”来啦!机器人巡逻南京路 这样的它你喜欢吗?...
- androidstudio jni开发_初识NDK开发(一)
- python启动appium服务_python下appium服务的自启动和关闭
- 小程序云开发,订阅消息定时批量发送实现代码
- React typescript issue