部署DeepSeek模型,进群交流最in玩法!
立即加群
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Swift 代理模式

Swift 代理模式

作者头像
BY
发布于 2018-05-11 07:06:52
发布于 2018-05-11 07:06:52
1.3K00
代码可运行
举报
文章被收录于专栏:BY的专栏BY的专栏
运行总次数:0
代码可运行

Xcode 8.2 | Swift 3.0

iOS开发中,无论是 Objective-C 还是 SwiftDelegate 有着具足轻重的位置,如TabelViewDelegateTableViewDataSource

Swift 中的代理模式 和 Objective-C 除了语法外,几乎一样。

Objective-C 代理模式

在介绍 Swift 代理模式前,先来看回顾一下 Objective-C 中的代理模式如何实现

Objective-C 中用代理实现反向传值:

委托方(子控制器)

委托方需要实现

  • 创建协议 、声明协议方法 @protocol SubViewDelegate <NSObject> - (void)backWithStr:(NSString *) str; @end
  • 创建一个代理属性 // weak声明 @property (nonatomic, weak) id<SubViewDelegate> delegate;
  • 执行协议方法 // 判断代理是实现该方法,避免carsh if ([self.delegate respondsToSelector:@selector(backWithStr:)]) { [self.delegate backWithStr:self.textField.text]; }
代理方(主控制器)

代理方需要实现

  • 遵守(继承)协议 @interface ViewController () <SubViewDelegate>
  • 将代理设为自己 subVC.delegate = self;
  • 实现代理方法 - (void)backWithStr:(NSString *)str { self.label.text = str; }

Swift 代理模式

Swift 代理模式 与 Objective-C 一样,只是语法不同。

Swift 中用代理实现反向传值:

委托方(子控制器)
  • 创建协议 、声明协议方法 protocol SubViewDelegate { func backStr(str: String) }
  • 创建一个代理属性 var delegate: SubViewDelegate?
  • 执行协议方法 /// 执行代理方法,将值回传 delegate?.backStr(str: textField.text ?? "")
代理方(主控制器)
  • 继承协议 class ViewController: UIViewController, SubViewDelegate
  • 将代理设为自己 subVC.delegate = self
  • 实现代理方法 func backStr(str: String) { self.textF.text = str }

总结

对比可以方法 Swift 代理模式 与 Objective-C 用法完全相同,只是语法发生了变化。

值得一提的是Swift 的扩展 extension可以用来继承协议,实现代码隔离,便于维护。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/// 使用扩展继承协议 实现协议方法 可以分离代码
extension ViewController: SubViewDelegate{
    /// 实现代理方法
    func backStr(str: String) {
        self.textF.text = str
    }
}

Demo源码

最后附上Demo源码

如果对你有帮助的话,Star✨下一吧!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.03.06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Swift 代理模式
在iOS开发中,无论是 Objective-C 还是 Swift ,Delegate 有着具足轻重的位置,如TabelViewDelegate 与 TableViewDataSource。
零式的天空
2022/03/23
5470
Protocol与Delegate 使用方法详解你要知道的KVC、KVO、Delegate、Notification都在这里
你要知道的KVC、KVO、Delegate、Notification都在这里 转载请注明出处 https://cloud.tencent.com/developer/user/1605429 本系列文章主要通过讲解KVC、KVO、Delegate、Notification的使用方法,来探讨KVO、Delegate、Notification的区别以及相关使用场景,本系列文章将分一下几篇文章进行讲解,读者可按需查阅。 KVC 使用方法详解及底层实现 KVO 正确使用姿势进阶及底层实现 Protocol与Dele
WWWWDotPNG
2018/04/10
1.1K0
Protocol与Delegate 使用方法详解你要知道的KVC、KVO、Delegate、Notification都在这里
窥探Swift之协议(Protocol)和委托代理(Delegate)回调的使用
  协议与委托代理回调在之前的博客中也是经常提到和用到的在《Objective-C中的委托(代理)模式》和《iOS开发之窥探UICollectionViewController(四) --一款功能强大的自定义瀑布流》等博客内容中都用到的Delegate回调。说到协议,在Objective-C中也是有协议的,并且Swift中的协议和Objc中的协议使用起来也是大同小异的,在Java等现代面向对象编程语言中有接口(Interface)的概念,其实和Swift中或者Objc中的Protocol(协议)是一个东西。
lizelu
2018/01/11
4K0
窥探Swift之协议(Protocol)和委托代理(Delegate)回调的使用
Swift| 基础语法(四)
总结下 swift下的基础语法,里面涉及到:常量&变量、Swift中的数据类型、逻辑分支、循环、字符串相关、数组和字典、方法的书写调用等内容,考虑到阅读体验分多篇来展示,希望对大家学习swift有所帮助,同时也是对自己的一个总结。
進无尽
2018/09/12
1.5K0
Swift| 基础语法(四)
iOS开发之通过代理逆向传值
在iOS开发中,传值是几乎每个App都会用到的,对于传统的顺向传值应该说是比较简单的,但是逆向传值往往会用到代理模式来实现,很多同学在这一块有迷惑,迷惑的不是怎么逆向传值,而是不理解代理模式,下面就来分析一下,如何理解和快速上手代理模式,并以一个简单的逆向传值为案例,看看代理模式是不是很难。 一、代理模式中的几个概念 讲代理模式之前,首先需要弄清楚两个概念:被代理对象和代理对象。并且需要知道它们之间是靠协议关连起来的。 1、被代理对象 被代理对象往往就是真正有做事意图的那个对象,比如卖房子案例中的想卖房子的
YungFan
2018/05/03
7750
iOS开发之通过代理逆向传值
iOS代理,通知,block的用法及不同
在开发过程中,总是遇到不同页面之间传参问题,代理,通知,block 都可以实现这种简单功能,但是有时候都是根据自己的熟悉程度选择使用的方法,并没有深度的认识之间的用法和不同,在此系统的整理下。
honey缘木鱼
2019/04/25
1.9K0
iOS代理,通知,block的用法及不同
设计模式 -- 代理模式
在代理模式中引入了一个新的代理对象,代理对象在客户端对象和目标对象之间起到中介的作用,它去掉客户不能看到的内容和服务或者增添客户需要的额外的新服务
xy_ss
2023/11/22
1590
设计模式 -- 代理模式
iOS开发-KVO与KVC、通知与代理模式
解释意思:通过一个key去找到对应的编码 初学者很同意搞混与KVO的区别,我提个意见最后是个C,想它就是词,于什么有关系:词典(NSDictiontroy)
孙寅
2020/06/02
6960
iOS - MVC与MVP的差异 (一)
拿我在以前写的一篇文章中作例子 iOS-NSArray与Model模型 该篇文章中Model层数据通过UITabelView的delegate & dataSource 方法
Wilbur-L
2021/11/12
8570
iOS中storyboard故事板使用Segue跳转界面、传值
在iOS的开发过程中,不可避免的要设计界面,在android中有xml设置界面和直接使用java代码设置界面控件两种方式,在之前的ios开发中也是类似的有xib文件设置界面及用代码直接设置控件两种方法,但后来又出了一种方式,就是storyboard故事板子,其实storyboard和xib文件很像,最大的不同之处在于一个xib文件对应一个ViewController视图控制器,而storyboard对应多个,基本一个应用只需要一个storyboard就可以了,不再需要为每个控制器创建一个xib文件,从这点上来说,还是很方便的,在storyboard中查看各个界面的跳转也很方便,但之前一直使用xib进行开发,对storyboard的使用不太熟悉,今天好好学习了一下其中的界面跳转和传值,用到了Segue这个东西,这里借着例子说明一下。
Cloudox
2021/11/23
1.8K0
iOS中storyboard故事板使用Segue跳转界面、传值
IOS开发之自定义Button(集成三种回调模式)
  前面在做东西的时候都用到了storyboard,在今天的代码中就纯手写代码自己用封装个Button。这个Button继承于UIView类,在封装的时候用上啦OC中的三种回调模式:目标动作回调,委托回调,Block回调。具体的内容请参考之前的博客:“Objective-C中的Block回调模式”,“Target-Action回调模式”,“Objective-C中的委托(代理)模式”。在接下来要封装的button中将要用到上面的知识点。之前在做新浪微博中的Cell的时候用到了Block回调来确定是那个Cel
lizelu
2018/01/11
1.3K0
IOS开发之自定义Button(集成三种回调模式)
iOS学习——页面的传值方式iOS----KVC和KVO 详解
在iOS开发过程中,页面跳转时在页面之间进行数据传递是很常见的事情,我们称这个过程为页面传值。页面跳转过程中,从主页面跳转到子页面的数据传递称之为正向传值;反之,从子页面返回主页面时的数据传递称之为反向传值。
mukekeheart
2019/09/29
1.9K0
iOS学习——页面的传值方式iOS----KVC和KVO 详解
Swift:delegate
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
菜菜不吃蔡
2019/11/03
1.2K0
wkwebview加载完成_【Swift】WKWebView与JS的交互使用
近日,有朋友问我关于WKWebView与JS的交互问题,可我之前一直使用的是UIWebView,也不曾做过WKWebView的交互啊!接下来大家一块学习下WKWebView是怎么实现原生代码和JS交互的。
安德玛
2022/03/08
6K0
iOS-代码规范
利用上周的业余时间把这篇规范整理了出来,我会将这篇规范作为我们iOS团队的代码规范,并且还会根据读者的反馈,项目的实践和研究的深入做不定时更新,还希望各位朋友看了多多指正和批评。
用户1740424
2018/07/23
2.3K0
iOS-代码规范
Swift基础语法(四)
在Swift5之前,我们一般是采用上面的方式来处理异常,在Swift5之后,苹果推出了一个Result枚举,Result枚举可以更加优雅地去处理异常。
拉维
2020/07/06
4.2K0
Swift基础语法(四)
史上最全的iOS之访问自定义cell的textField.text的N种方法
问题背景:自定义cell中有一个UITextField类型的子控件。我们经常要在tableView中拿到某个cell内textField的文本内容进行一些操作。比如某些app的注册界面就是以tableView的形式存在的,注册时往往需要注册姓名、昵称、邮箱、地址、联系方式等信息。然后点击注册或者提交,这些信息就会被提交到远程服务器。有人说,注册页面就那么固定的几行cell,没必要搞得那么复杂,完全可以用静态cell实现。但还有一些情况,当前页面的tableView的cell的行数是不确定的(比如当前页面显示多好行cell由上一个页面决定或者由用户决定),这种情况下不太适合使用静态cell。也不能够通过分支语句的方式一一枚举出各个case。所以需要一中通用的动态的方法。那么我们怎么在tableView中准确的拿到每一行cell中textField的text呢?以下我将要分四个方法分别介绍并逐一介绍他们的优缺点,大家可以在开发中根据实际情况有选择的采用不同的方法。 如下图,就是我之前开发的一个app中用xib描述的一个cell,当用户点击“注册”或者“提交”button时候,我需要在控制器中拿到诸如“法人姓名”这一类的信息:
VV木公子
2018/06/05
7.1K0
史上最全的iOS之访问自定义cell的textField.text的N种方法
关于OC代理的问题:self.delegate = self
于是心中产生了不少疑问,为什么会这样写?这样写是否是正确的?带着这些疑问,我去查找了一些资料并进行了整理,希望可以分享给大家。
用户5521279
2021/02/09
1.5K0
关于OC代理的问题:self.delegate = self
自定义转场详解(一)
前言 本文是我学习了onevcat的这篇转场入门做的一点笔记。 今天我们来实现一个简单的自定义转场,我们先来看看这篇文章将要实现的一个效果图吧: 过程详解 热身准备 我们先创建一个工程,首先
Scott_Mr
2018/05/16
9800
iOS_scrollView title and line view, 滚动的标题和线
废话不多说, 直接上代码 // // MOTitleLineView.h // MOTitleLineView // // Created by 莫小言 on 15/12/17. // Copyright © 2015年 莫小言. All rights reserved. // #import <UIKit/UIKit.h> // title 对齐type typedef NS_ENUM(NSUInteger, MOTitleLineViewType) { MOTitleLineViewTy
mikimo
2022/07/20
9820
iOS_scrollView title and line view, 滚动的标题和线
推荐阅读
相关推荐
Swift 代理模式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验