gpt4 book ai didi

objective-c - 如何强制在 Objective-C 中不使用匿名 block 的参数?

转载 作者:行者123 更新时间:2023-12-04 04:45:26 25 4
gpt4 key购买 nike

我在使用名为 TransitionKit 的库时遇到了一种情况。 (帮助您编写状态机)我想以回调的形式提供进入和退出操作。

遗憾的是,回调包含两个完全无用的参数。典型的 block 必须如下所示:

^void (TKState *state, TKStateMachine *stateMachine) {
// I TOTALLY don't want parameters `state` or `stateMachine` used here
};

(这是一个匿名代码块。如果您不清楚,请阅读 block here)

正如我在评论中指出的那样,我真的不希望在正文中提到这些参数。我试过简单地删除 this question 中建议的参数名称。像这样:
^void (TKState *, TKStateMachine *) {
// I foobar all I like here
};

但遗憾的是,代码将无法编译:(。

如何在代码中强制不使用参数?

最佳答案

这是我能想到的。相当 hack 并且依赖于 GCC poison pragma,它不是标准的,而是一个 GNU 扩展 - 不过,考虑到您可能正在使用 clang 编译它无论如何,这应该不是问题。

#define _state state
#define _stateMachine stateMachine

#pragma GCC poison state stateMachine

然后编译:
^(TKState *_state, TKStateMachine *_stateMachine) {
do_something();
}

但这不会:
^(TKState *_state, TKStateMachine *_stateMachine) {
do_something(state, stateMachine);
}

关于objective-c - 如何强制在 Objective-C 中不使用匿名 block 的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18271660/

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