swift中使用GCDMulticastDelegate
2015-08-14 22:03
423 查看
在开源库XMPPFramework中提供了一个GCDMulticastDelegate类,使用它可以为一个对象添加多个被委托的对象,以前用oc编写的工程引入了这个类,使用起来十分方便。最近由于换了工作,新项目需要用swift来实现。我也想把这个对象引入到工程中。仔细研究了一下,终于可以实现了。
1.导入GCDMulticastDelegate类,在桥接文件中加入:#import "GCDMulticastDelegate.h"
2.建立一个swift的代理文件,文件体如下
@objc protocol MyDelegate {
optional func test()
}
注意的是,这里的代理函数一定要声明为optional的
3.建立一个新的swift文件,命名为MyMulticastDelegate,文件体如下
import UIKit
class MyMulticastDelegate: GCDMulticastDelegate,MyDelegate {}
表示新类是继承了GCDMulticastDelegate,并实现了MyDelegate
4.在需要使用multiDelegate发test消息的类中,定义一个实例变量:
var multiDelegate:MyMulticastDelegate
在类的初使化函数里实例化:
multiDelegate = MyMulticastDelegate()
并在类中定义两个如下函数:
func addMultiDelegate(delegate:MyDelegate, delegateQueue:dispatch_queue_t){
multiDelegate?.addDelegate(delegate, delegateQueue: delegateQueue)
}
func removeMultiDelegate(delegate:MyDelegate){
multiDelegate?.removeDelegate(delegate)
}
需要发消息时,如下调用:
if let tempMultiDelegate:MyDelegate = self.multiDelegate{
tempMultiDelegate.test!()
}
注意这里的消息函数后面是!,目的是强制调用GCDMulticastDelegate里面的forwardInvocation函数。如里写成?消息监听者会收不到消息
5.需要接收test()消息的对象以self为参数调用addMultiDelegate
(本人是新接触swift,如果有更好的方法,欢迎留言给我)
1.导入GCDMulticastDelegate类,在桥接文件中加入:#import "GCDMulticastDelegate.h"
2.建立一个swift的代理文件,文件体如下
@objc protocol MyDelegate {
optional func test()
}
注意的是,这里的代理函数一定要声明为optional的
3.建立一个新的swift文件,命名为MyMulticastDelegate,文件体如下
import UIKit
class MyMulticastDelegate: GCDMulticastDelegate,MyDelegate {}
表示新类是继承了GCDMulticastDelegate,并实现了MyDelegate
4.在需要使用multiDelegate发test消息的类中,定义一个实例变量:
var multiDelegate:MyMulticastDelegate
在类的初使化函数里实例化:
multiDelegate = MyMulticastDelegate()
并在类中定义两个如下函数:
func addMultiDelegate(delegate:MyDelegate, delegateQueue:dispatch_queue_t){
multiDelegate?.addDelegate(delegate, delegateQueue: delegateQueue)
}
func removeMultiDelegate(delegate:MyDelegate){
multiDelegate?.removeDelegate(delegate)
}
需要发消息时,如下调用:
if let tempMultiDelegate:MyDelegate = self.multiDelegate{
tempMultiDelegate.test!()
}
注意这里的消息函数后面是!,目的是强制调用GCDMulticastDelegate里面的forwardInvocation函数。如里写成?消息监听者会收不到消息
5.需要接收test()消息的对象以self为参数调用addMultiDelegate
(本人是新接触swift,如果有更好的方法,欢迎留言给我)
相关文章推荐
- swift--闭包
- Swift 字典的常用方法
- swift简介
- Swift:什么时候使用结构体和类
- 基于Swift语言开发微信、QQ和微博的SSO授权登录代码分析
- Swift 数组的常用操作
- Swift String 一些常用方法
- Swift 2.0 项目中利用中自定义行高 时遇到的问题?
- Swift学习——Swift解释特定的基础(七)
- Swift和OC混用
- Chapter 17 Core Data iOS 8 -Swift Programming cookBook 读书笔记
- swift 字符串和字符相关
- swift -NavigationController,代理传值
- swift -UIView的使用
- swift -类的定义及使用
- swift -结构体
- swift -函数、函数指针
- Swift入门(九)——String与Int、Double、Float等数字相互转换
- Swift爬行篇-- UIButton
- Swift- 枚举中的rawValue和hashValue