[IOS]如何使用block来实现回调
[IOS]如何使用block来实现回调
一.回调方法总结:
可以参考:和 DataSource 2.Notification 3.Blocks
二.Block
这里重点介绍Block这种用法:
在OC里面是Block,在swift里面叫closure,用法是类似的.
首先OC block简单参考如下:
PingInfo : NSObject- (void) addCallBack:(void(^)(NSString *)) callBackBlock ;
B.m:
typedef void(^CallBackBlock) (NSString *);@interface PingInfo()@end@implementation PingInfo{ CallBackBlock _callBackBlock;}- (void) addCallBack:(void(^)(NSString *)) callBackBlock { _callBackBlock = callBackBlock; if(_callBackBlock){ _callBackBlock(@"test-=-=-=-=-="); }}
A.swift:
let pingInfo = PingInfo.init() pingInfo.addCallBack( { string in print("callback message: \(string)") } )
Perfect,没有任何问题.可以获得返回数据了.然后我就疑惑,是不是
pingInfo.callBackBlock = { string in print("callback message: \(string)") }
这行代码OC不会识别呢,是不是swift和OC之间的处理问题呢,然后我又换了纯swift来试一次回调,参考操作如下:
//错误pingInfo.callBackBlock = { string in print("callback message: \(string)") }
B.m:
- (void)passBlock{ if(_callBackBlock == NULL){ NSLog(@"callBackBlock null "); } if(_callBackBlock){ _callBackBlock(@"test-=-=-=-=-="); }}
因此,我之前的做法直接使用了B类中的block调用,当然是空的,因为并没有执行赋值:
pingInfo.callBackBlock = { string in print("callback message: \(string)") }
所以正确的是:
pingInfo.callBackBlock = { string in print("callback message: \(string)") }pingInfo.passBlock() //正确
综上,block有两种操作方式,要不就通过方法来传给B来使用,要不就直接赋值,其实本质都是一样的,和上面的基金例子一样,是否通过代理来买而已.
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~