Swift4.0 如何正确的写Delegate 模式

swift4.0 UITableView纯代码实现 // // ViewController.swift // ListView // // Created by 朱莹浩 on 2017/7/22. // Copyright © 2017年 朱莹浩. All rights reserved. // import UIKit class ViewController: UIViewController, UITableViewDataSo 阅读详情

由于项目中要开始转想 swift4.0了,说一下Delegate 在swift中使用方式。

@objc protocol AADelegate{

    func okAction()  //必须方法

    @objc optional func clickAction() //可选方法

}


    weak var  delegate: AADelegate?

 

   //执行代理时

   if let delegateOK = self.delegate{

       delegateOK.clickAction()

       delegateOK.clickAction?()

   }



一、在声明的protocol中为什么要用  @objc 呢? 
因为 Swift 的 protocol 是可以除了 class 以外的其他类型遵守的,而对于像 struct 或是 enum 这样的类型,本身就不通过引用计数来管理内存,所以也不可能用 weak 这样的 ARC 的概念来进行修饰。
想要在 Swift 中使用 weak delegate,我们就需要将 protocol 限制在 class 内。一种做法是将 protocol 声明为 Objective-C 的,这可以通过在 protocol 前面加上 @objc 关键字来达到,Objective-C 的 protocol 都只有类能实现,因此使用 weak 来修饰就合理了(喵大 有详情的介绍 : http://swifter.tips/delegate/)
二、为什么要 delegateOK.clickAction?() 中要有个问号呢
原因是在OC的代码中, 用respondsToSelector()方法来判断是否实现了方法。
而在swift 中就直接可以用 ? 来判断是否实现了方法。有时系统可能会给你自动提示,然后你就fix 一下,系统给你添加了个 ! 符合。但是 !符合的意思是一定实现的意思。
三、一定要 weak var  delegate: AADelegate?  去声明你的代理属性,避免循环引用问题


swift 中的delegate使用 1.定义协议 2,设置代理属性 3,设置代理 4,遵守协议,实现方法 5,让代理干活 阅读详情

相关推荐

【swift_4】swift之代理传值(delegate的用法)

http://blog.csdn.net/riven_wn/article/details/46605211

Swift —— delegate 设计模式

所谓 delegate 就是代理模式。简单来说,delegate 模式就是在类的函数里运行完一段代码后,你可以通过一个符合某个代理协议的属性来调代理的方法。其中,代理方法就是回调函数。

m0_73093743的博客 574

swift-多delegate的使用

一般在我们使用delegate都知道,是一对一的关系。在目前的项目中,有这样一个需求,在服务端收到了一个下发事件,需要在不同的页面,不同的VC都收到此事件,并进行相应的处理

如何理解swift中的delegate

Delegation翻译为代理或者委托,是一种设计模式。顾名思义,使class或struct能够将某些职责移交给其他类型的实例。 该设计模式通过定义一个封装(包含)delegate的protocol(协议)来实现,从而保证这个代理囊括所定义的功能。Delegation可用于响应特定操作,或者从外部源检索数据,而不需要知道该源的基础类型。(一)这里举一个dice-based(摇骰子)的游戏作为例子:

qq_21933583的博客 757

Swift5.2 Delegate(代理)

Swift5.2 Delegate(代理)

人类肠道微生物群落代谢建模

MICOMWeb 是款用户友好型网站,专为人类肠道微生物群落代谢建模设计。该网站旨在解决基因组尺度代谢模型(in silico)构建过程中的3大限制:① 使用 MICOM Python 包进行通量平衡分析时对用户 Python 编程知识的要求;② 支持预定义和用户自定义饮食,以生成专属代谢模型;③ 处理宏基因组鸟枪法测序或 16S 扩增子测序获得的真实丰度数据时,所需的高通量计算基础设施。本文展示了 MICOMWeb 的核心功能,用户可轻松开展虚拟实验,为3个已发表数据集的实验验证生成功能性假设。

多组・学・多组学 1169

Swift - 委托(delegate)的介绍,及使用样例

1,委托的说明 委托(delegate)是Cocoa的一个术语,表示将一个对象的部分功能转交给另一个对象。 比如对象A希望对象B知道将要发生或已经发生某件事情,对象A可以把对象B的引用存为一个实例变量。这个对象B称为委托。当事件发生时,它检查委托对象是否实现了与该事件相适应的方法。如果已经实现,则调用该方法。 由于松耦合的原因,一个对象能成为多个对象的委托。某...

weixin_34130269的博客 300

若依框架-实现管理端与用户端的不同页面布局

我们现在要做的是:管理员登录时展示后台管理端,普通用户登录时展示我们自己写的页面。所以我们可以用v-if来判断登录用户的角色,如果用户角色包含admin,说明是管理员,渲染管理端相关组件,否则渲染用户端组件。不过若依作者的本意还是想退出系统后清空角色信息,所以为了保险期间,我们可以在退出系统后,延迟2秒,再单独清空角色信息。当我们登录管理端后,再退出登录,会有那么一瞬间渲染用户页面,然后才是回到登录界面。这个时候,前端检测到角色信息为空,不包含admin,于是就会渲染用户页面。用来延迟 2 秒执行。

m0_74462339的博客 1566

Swift - delegate

Cocoa 开发中接口-委托(protocol-delegate)模式是一种常用的设计模式,它贯穿于整个Cocoa 框架中,为代码之间的关系清理和解耦合做出了不可磨灭的贡献。 在ARC 中,对于一般的delegate,我们会在声明中将其指定为weak,在这个delegate 实际的对象被释放的时候,会被重置回nil。这可以保证即使delegate 已经不存在,我们也不会由于访问到已被回收的内存而导致崩溃。ARC的这个特性杜绝了Cocoa 开发中一种非常常见的崩溃错误,说是救万千程序员于水火之中也毫不为过。

HumorousGhost 647

现代控制理论(4)——李雅普诺夫稳定性理论

文章目录

wang7301的博客 5万+

控制障碍函数(Control Barrier Function,CBF) 二、示例

使用一个经典简单的示例讲解CBF的推导

Lyajpunov的博客 6430

LCActionSheet Block与Delegate对比:选择最适合你的回调方式

LCActionSheet是一款简约而不失强大的iOS ActionSheet组件,被微博、微信和QQ等主流应用广泛采用。在iOS开发中,处理用户交互回调是至关重要的环节,LCActionSheet提供了两种主要的回调方式:Block和Delegate。本文将为你详细解析这两种方式的差异,帮助你根据项目需求选择最合适的回调方案。 ## 📱 什么是LCActionSheet? LCAction

gitblog_01041的博客 1021

485芯片AB波形正负半周的问题探讨

      本人做的一个产品,产品的其中一个接口是RS485的,我们使用的芯片是MAX13487E。MCU是STM32F103,MCU的USART通过光耦隔离后,接到MAX13487E。因为STM32F103的VCC是3.3V的,MAX13487E的VCC是5V。      部分原理图如下,上述部分电路参考了官方的参考设计,现在测试的AB波形时候发现如下问题。1.把R10和R16改为1k,示波器C...

qq_26308521的博客 1万+

通过ms-swift调用C# Delegate封装回调函数

通过ms-swift与Python.NET结合,实现Python端大模型推理完成后直接调用C# Delegate回调,适用于WPF、Unity等.NET应用场景。该方案实现了跨语言高效通信,避免轮询开销,提升响应速度,同时保持AI模块与业务逻辑解耦,支持本地化部署与国产硬件适配。

weixin_33597080的博客 297

深度强化学习算法PPO训练Pendulum

returnadv = 0print('状态空间维度:', state_n)print('动作空间维度:', action_n)steps = []if done:breakif done:breakelse:steps = []if done:break。

weixin_43336108的博客 808

【SAP ME 3】JAVA 调用SAP PO WebService

Java调用SAP PO/PI WebService接口

探索 Java 编程的技巧、最佳实践和解决方案。本博客提供针对 Java 开发者的实用指南,涵盖从基础到高级话题,旨在提升编程效率和技能。 847

ReactiveCocoa 用 RACSignal 替代 Delegate

ReactiveCocoa 用 RACSignal 替代 Delegate 原文:http://www.cocoachina.com/ios/20141229/10789.html 开篇扯淡 最近又在看 ReactiveCocoa 了(下面用 RAC 来替代 ReactiveCocoa)。虽然依然是 hello world 级别。但是 hello world 也是可以

xiong1081的博客 506

光伏微电网蓄电池储能控制系统设计及动态性能分析

本文构建了光伏微电网蓄电池储能控制系统的完整理论体系。在系统架构方面,提出了基于直流母线电压平衡的多时间尺度能量管理理论,建立了光伏发电单元的二阶物理模型和MPPT动态跟踪算法。针对蓄电池系统,设计了融合二阶RC等效电路与扩展卡尔曼滤波的SOC估计方法,误差控制在3%以内。双向DC-DC变换器采用状态空间平均建模方法,推导了小信号传递函数,为闭环控制提供理论基础。该体系实现了从瞬时功率平衡到长期能量调度的多层级协同控制,为微电网稳定运行提供了系统的解决方案。

AI的内部世界的博客 191

如何使用Delegated彻底解决Swift闭包循环引用问题

在Swift开发中,闭包循环引用是导致内存泄漏的常见元凶之一。Delegated作为一款基于闭包的委托库,通过简洁的API设计,帮助开发者在享受闭包便利性的同时,彻底避免循环引用风险。本文将详细介绍如何通过Delegated实现安全高效的委托模式,让内存管理不再成为开发负担。 ## Swift闭包循环引用的隐形陷阱 😱 当闭包捕获其外部作用域中的对象时,如果被捕获的对象同时持有闭包的引用,就

gitblog_00416的博客 663

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Swift Package Manager集成Delegated完全指南

Delegated是一个基于闭包的委托模式实现库,专为解决Swift开发中常见的内存泄漏问题而设计。通过Swift Package Manager集成Delegated,开发者可以轻松实现安全的委托模式,避免传统委托模式中可能出现的循环引用问题。 ## 为什么选择Delegated? 在Swift开发中,委托模式是一种常用的设计模式,但传统的委托实现往往需要使用弱引用(weak)来避免内存泄漏

gitblog_00012的博客 929

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

delegate设计模式

delegate设计模式 1.代理 三方:委托方、代理方、协议 2.定义协议 协议:一堆方法的声明(面试题) #import <UIKit/UIKit.h> #warning 1.定义协议 @class TouchView; @protocol TouchViewDelegate <NSObject> @optional // touchV...

weixin_30802273的博客 138

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

SelectableTextView委托机制深度剖析:多验证器冲突解决与Delegate高级用法完整指南

SelectableTextView 是一款面向 iOS(Swift)的开源**文本选择与文本展开**组件,可让 UILabel 式文本具备"点选、高亮、展开"能力。本文深度剖析它的**委托机制**:当多个验证器同时命中同一个单词时,`SelectableTextViewDelegate` 如何仲裁冲突,以及如何通过 4 个委托方法定制动画、截断与高度变化行为。 [![SelectableTex

gitblog_00516的博客 449

从0到1开发Toast-Swift插件:完整API设计与实现思路

Toast-Swift是一个高度可定制的iOS提示框库,采用现代Swift语言构建,提供流畅的动画效果和灵活的自定义选项。本文将深入解析这个强大的Swift提示框库的完整API设计理念和实现思路,帮助开发者理解如何从零开始构建一个专业级的iOS UI组件库。 ## 📱 Toast-Swift核心功能概述 Toast-Swift是一款基于UIKit构建的iOS提示框组件,它模仿了iOS 14+

gitblog_00224的博客 1057

block、delegate、notification使用

block、delegate 1.delegate 运行成本低 block 运行成本高 2.delegate 更安全、不会出现循环引用 可以支持多个方法 但回调返回参数限制于ns类 3.block 系统再带动画 可读性高,只要实现就可以了不用设置代理、实现方法 4.block 本质就是个对象 能当做属性、成员变量传递 afnetworking、gcd都用block 一、block ...

iOSzxg的博客 352
上一篇: Swift 4.0常用宏定义属性与方法
下一篇: Swift #function 和 _cmd (Objective-C)
hsf_study
博客等级 码龄11年 10粉丝 126原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值