NSObject+BBALambda.h 1.93 KB
//
//  NSObject+BBALambda.h
//  BBAPods
//
//  Created by xmfeng on 17/4/18.
//  Copyright © 2017年 Baidu. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "BDPFoundationDefines.h"

/*
 * 生成一个lambda对象并将其绑定到自己上,建议与UIControl addTarget: action:forControlEvents: 和 UIBarButtonItem 初始化方法配合使用,使用例子如下:
 * [UIBarButtonItem alloc] initWithTitle: style:UIBarButtonItemStylePlain target:[self bba_bindBlock:block] action:@selector(bba_execute)
 *  button addTarget:[button bba_bindLambda:lambda] action:@selector(bba_executeWithSender:) forControlEvents:
 * 详细介绍请看README-BBARuntime
 */

/**
 @block
 @brief  默认的 Lambda (闭包)
 @param  sender  传递的参数
 */
typedef void (^BBALambda)(id sender);

/*
 * lambda对象,可以执行execute方法
 */
@interface BBALambdaObject : NSObject

/**
 * @brief 初始化一个lambda对象
 *
 * @param lambda 默认的 Lambda (闭包),带一个sender参数
 * @return BBALambdaObject 实例
 */
- (id)initWithLambda:(BBALambda)lambda;

/**
 * @brief 执行 lambda(nil),建议与 bba_bindBlock 配合使用
 *
 */
- (void)bba_execute;

/**
 * @brief 执行 lambda(sender),建议与 bba_bindLambda 配合使用
 *
 * @param sender 传递的参数
 */
- (void)bba_executeWithSender:(id)sender;

@end

@interface NSObject (BBALambda)

/**
 * @brief 绑定一个不带任何参数的 Lambda
 *
 * @param block void(^)(void)
 * @return BBALambdaObject
 */
- (BBALambdaObject *)bba_bindBlock:(void(^)(void))block BDP_FOUNDATION_DEPRECATED("please use bdp_bindBlock:");
- (BBALambdaObject *)bdp_bindBlock:(void(^)(void))block;

/**
 * @brief 绑定一个默认的 Lambda
 *
 * @param lambda void (^)(id sender)
 * @return BBALambdaObject
 */
- (BBALambdaObject *)bba_bindLambda:(BBALambda)lambda BDP_FOUNDATION_DEPRECATED("please use bdp_bindLambda:");
- (BBALambdaObject *)bdp_bindLambda:(BBALambda)lambda;

@end