gpt4 book ai didi

ios - 在 NSArray 中存储带有参数的 block

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:22:57 27 4
gpt4 key购买 nike

我知道我可以像 block 一样定义一个属性,比如:

self.myProperty = ^(){
// bla bla bla
};

将它存储在一个数组上做

NSArray *arrayOfBlocks = [[NSArray alloc] initWithObject:[self.myProperty copy]];

然后使用

执行它
void (^ myblock)() = [arrayOfBlocks objectAtIndex:0];
myblock();

但是如果 block 有参数呢?

我的意思是,像这样的 block :

self.myProperty = ^(id myObject){
// bla bla bla
};

我想要的是能够保持这条线不变

void (^ myblock)() = [arrayOfBlocks objectAtIndex:0];
myblock();

// yes, I know I can replace myblock(); with myblock(object);
// but because I have a large number of blocks on this array, I will have to build
// a huge if if if if statements to see what block is being run and change the objects passed

我想要的是将带有参数的 block 存储在数组中……像这样:

NSArray *arrayOfBlocks = [[NSArray alloc] initWithObject:[self.myProperty(object?) copy]];

这可能吗?

最佳答案

幸运的是, block 是一流的值(value)。您可以制作一个工厂方法,该方法返回一个 block ,该 block 将被特定对象调用。

typedef void (^CallbackBlock)(void);
- (CallbackBlock)callbackWithNumber:(int)n
{
return [^{
NSLog(@"Block called with %d", n);
} copy];
}

用法:

[mutableArray addObject:[self callbackWithNumber:42]];
[mutableArray addObject:[self callbackWithNumber:1337]];

// later:
CallbackBlock cb = [mutableArray objectAtIndex:0];
cb();

关于ios - 在 NSArray 中存储带有参数的 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16327678/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com