你可以在一个选择器中存储多个方法吗?

bme*_*nde 5 xcode objective-c ios

我有一个类似于程序的拼图,你可以按照正确的顺序将块放在一起,以尝试完成拼图.当你完成后,你可以点击播放按钮然后程序将让一个小男人走过你的街区所在的街区.因此,如果您放置一个块,一个块右,一个块下来,然后点击播放程序将调用然后调用方法向上移动,向右移动,向下移动.

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

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

if(random requirements)
[self moveUp]

else if(random requirements)
[self moveDown]

else if (random requirements)
[self moveRight]

else if(random requirements)
[self moveLeft]
Run Code Online (Sandbox Code Playgroud)

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

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]
Run Code Online (Sandbox Code Playgroud)

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

das*_*ght 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
}
Run Code Online (Sandbox Code Playgroud)

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

  • 最初在将字符串添加到数组时使用`NSStringFromSelector()`可能更好. (2认同)