gpt4 book ai didi

ios - 接收 block 的函数?

转载 作者:行者123 更新时间:2023-12-01 19:02:06 27 4
gpt4 key购买 nike

我需要一个特殊版本的 dispatch_after。我需要它将参数传递给匿名函数,匿名函数在执行前检查参数和类变量是否匹配。

我已经让它像这样工作了:

  double delayInSeconds = 5;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);

int mod = self.invalidationCount;

dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
if(mod == self.invalidationCount)
[self doAction:speed accelTime:accel];
});

但是,这很脏。我必须在类里面需要它的任何地方复制这个 block 。

这是我想要的:

类似于以下内容:
double delayInSeconds = 5;
dispatch_after_safe(delayInSeconds,self, ^(void){
[self doAction:speed accelTime:accel];
});

或者如果可能的话,以消息形式,这样我就不必通过自我,但这没问题......

本质上,dispatch_after_safe 应该执行以下操作:
{
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);

int mod = parameterSelf.invalidationCount;

dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
if(mod == parameterSelf.invalidationCount)
//execute the parameter block
});
}

从本质上讲,我需要一个包装器来完成我目前正在做的事情,但我是 Objective-C 的新手,我不太确定在语法上如何做这样的事情。

这样做的全部意义在于,用户可以按下 Back 来停止任何排队的 future 事件。

谢谢

最佳答案

你的意思是这样的:

void dispatch_after_safe(NSTimeInterval delay, id pmself, dispatch_block_t block) {
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delay * NSEC_PER_SEC);
int mod = pmself.invalidationCount;
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
if (mod == pmself.invalidationCount) {
block();
}
});
}

(我建议将类型 id 替换为应该使用的任何类型的对象。)

关于ios - 接收 block 的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22128914/

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