我创建了一个定义如下的类:
标题
typedef void (^myBlock)(NSString *value);
- (instancetype)initWithIdentifier:(NSString *)identifier
runOnSelection:(myBlock)runOnSelection;
当我创建这种对象时,我会这样做:
MyObject *object = [[MyObject alloc] initWithIdentifier:@"my id"
runOnSelection:^(NSString *value){
doThis();
doStuff();
doSomethingElse();
}];
问题在于我有很多对象按顺序被初始化,所有这些都做同样的事情。
我正在考虑为doThis
,doStuff
和doSomethingElse
创建一个块,如下所示:
void (^doALot)(NSString *value) = ^void(NSString *value) {
doThis();
doStuff();
doSomethingElse();
};
并用
之类的内容替换初始化MyObject *object = [[MyObject alloc] initWithIdentifier:@"my id"
runOnSelection:doALot()];
但问题是doALot
需要一个参数。如何将块附加到类似的东西上?
我知道我能做到
MyObject *object = [[MyObject alloc] initWithIdentifier:@"my id"
runOnSelection:^(NSString *value){
doALot(value)
}];
但是我想知道我是否可以通过简单地将两者连接起来而不必将其放入块内。如果我没有错,我看到Apple在拥有处理程序的API时这样做,你可以在外部或内部定义处理程序,所以我怀疑这是可能的。
如何?
答案 0 :(得分:1)
创建新的块对象,如下所示 -
typedef void (^myBlock)(NSString *value);
myBlock block=^(NSString *value){
doThis();
doStuff();
doSomethingElse();
};
并用
之类的内容替换初始化MyObject *object = [[MyObject alloc] initWithIdentifier:@"my id"
runOnSelection:block];
希望它有所帮助!