5

我有一个类似拼图的程序,您可以按照正确的顺序将积木拼凑在一起,尝试完成拼图。当你完成后,你可以点击播放按钮,然后程序会让一个小人在你的积木所在的地方穿过你的积木。因此,如果您将上移一格、右移一格、下移一格,然后点击播放,程序将调用然后调用方法上移、右移、下移。

当我的程序运行并试图找出要调用的方法和顺序时,我需要在程序找到它们时按顺序存储这些方法,基本上,我不能让程序在计算时立即调用这些方法找出要调用的方法,否则在块上移动的人会快速移动,我想将方法​​存储在某种方法数组中(我认为这就像某种选择器),这样我就可以调用每个方法在我的程序弄清楚它要做什么之后的某个时间间隔内。

我现在的正常程序看起来像这样

if(random requirements)
[self moveUp]

else if(random requirements)
[self moveDown]

else if (random requirements)
[self moveRight]

else if(random requirements)
[self moveLeft]

好吧,我宁愿这看起来像这样

if(random requirements)
SEL selector addMethod:[self moveUp]

else if(random requirements)
SEL selector addMethod:[self moveDown]

else if (random requirements)
SEL selector addMethod:[self moveRight]

else if(random requirements)
SEL selector addMethod:[self moveLeft]

显然这不是真正的语法,但你能理解我在找什么吗?

4

1 回答 1

8

您不能在一个选择器中存储多个选择器,但是创建一个选择器数组是一件非常有效的事情。最简单的方法是将选择器的字符串表示形式存储在 中NSMutableArray,并从遍历数组的代码中的字符串创建选择器。

NSMutableArray *selectorNames = [NSMutableArray array];
if(random requirements)
    [selectorNames addObject:NSStringFromSelector(@selector(moveUp))];
if(random requirements)
    [selectorNames addObject:NSStringFromSelector(@selector(moveDown))];
...
for (NSString *selectorName in selectorNames) {
    SEL nextSelector = NSSelectorFromString (selectorName);
    // Now you can invoke your selector
}

除了选择器之外的另一个选项是使用 blocks。块也非常擅长封装动作,您不需要单独存储它们的目标。

于 2012-07-12T17:35:01.947 回答