温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

BlocksKit让block更普及

发布时间:2020-07-21 17:54:12 来源:网络 阅读:5548 作者:menic 栏目:移动开发

介绍

block出现之后,apple的library也在渐渐的,由少到多的支持block。BlocksKit(github)是一个library,他给一些类带来了更好的block支持。主要功能有下面三个方面:

* 通过block传入事件处理函数

* 创建动态代理,传入block给想要实现的方法。

* 在很多基础的类上增加额外的方法。

通过block传入事件处理函数

拿UIControl打比方,要想处理一个事件:

以前:

需要通过addTarget:(id)action:(selector)forControlEvents:(UIControlEvents)将某一个对象的某一个selector传入,一般的做法是在viewcontroller里定义一个方法专门处理某一个按钮的点击事件。

现在:

通过addEventHandler:(BLSenderBlock)forControlEvents:(UIControlEvent)将一个block注册上去,不需要单独定义方法。

创建动态代理

代理是objective c里常用的模式,主要用来做逻辑切分,一个类做一类事情,让代码的耦合度减少。但他不方便的地方在于,要创建一个代理,就要定义一个类,声明这个类遵循那些接口,然后实现这些接口对应的函数。动态代理(Dynamic delegate)则让我们能够在code里,on the fly的创建这样一个代理,通过block定义要实现的方法。例子看这里。

A2DynamicDelegate *dd = alertView.dynamicDelegate;
 [dd implementMethod: @selector(alertViewShouldEnableFirstOtherButton:) withBlock: ^(UIAlertView *alertView) {
    NSLog(@"Message: %@", alertView.message);
    return YES;
}];
alertView.delegate = dd;

基础类上增加新方法

比如在NSArray上增加了函式编程的each, map, reduce等。

详细文档在这里。

总结

从第一刻看到BlocksKit,我就把他作为每一个iOS项目中必不可少的基础类库。我个人使用最多的功能就是通过block来传入事件处理方法。对于像我这样希望将相关的code放到一起的程序员,BlocksKit绝对是福音。


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI