-1

我已经为此查看了关于 SO 的各种答案,但无法完全理解这一切是如何工作的。

我所拥有的是一个包含可触摸元素的 GameEngine,我想要的是当一个元素被触摸时,它会触发 GameEngine 侦听并适当处理的“我已被触摸”事件。

在 C# 中,我会使用委托/事件来执行此操作,但似乎找不到使用块的体面 obj c 等价物。- 我想使用 Blocks,因为它更类似于我习惯的 C# 中的匿名函数。

在 C# 中,我只需执行以下操作,在目标 c 中,似乎我需要编写一页代码才能使相同的事情正常工作?

touchableObject.touched += (o) => { handler code yay }

根据 Driis 的回答进行编辑:

宣言

typedef void (^CircleTouchedHandler)(id parameter);

@interface CircleView : UIView{
}

@property CircleTouchedHandler Touched;

如何调用它并将自己作为参数传递?

[self Touched(self)]; // this doesnt work
4

1 回答 1

1

在 Objective-C 中,这看起来像:

touchableObject.touched = ^(id o) { /* handler code */ };

假设 touched 是适当块类型的属性。如果您重用块类型(想想 C# 中的 Func),那么对它进行 typedef 是有意义的,因为 ObjC 中的块声明往往会变得难以快速阅读。

当您来自另一种具有稍微更优雅的块/lambda语法的语言时,块语法需要一些时间来适应Objective-C。要学习和作为参考,请参阅这个以前的答案,这对我有很大帮助。

要 typedef 一个类型为touched,你会使用类似的东西:

typedef void (^Handler)(id parameter);

然后只需将所触摸的属性声明为类型处理程序。

于 2013-11-09T13:27:10.097 回答