[IOS]如何使用block来实现回调

网友投稿 1026 2022-09-02

[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小时内删除侵权内容。

上一篇:[前端]关于使用ajax下载问题
下一篇:一份非常完整的MySQL规范(mysql通俗讲解)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~