gpt4 book ai didi

iphone - 我如何/将实现莫尔斯电码生成器?

转载 作者:行者123 更新时间:2023-12-03 20:57:23 25 4
gpt4 key购买 nike

我想知道实现莫尔斯电码生成器的最佳方法是什么。它的工作方式是用户输入一个单词或短语,然后 NSString 将作为参数传递到我的方法中进行处理。我想要处理的方式是循环遍历字符串中的每个字符,然后播放正确的音调序列。我已经在一个单独的类中实现了该机制。

我已经尝试了很多不同的方法,但它们似乎都会引入某种问题。到目前为止我尝试过的事情是:创建一个 NS 计时器,使用延迟方法调用(performSelector:withObject:afterDelay)。

下面是我用来延迟的方法的示例,但问题是,如果用户输入“aaaa”,则只有第一个“a”会播放,因为整个循环将在莫尔斯电码之前完成序列甚至完成生成。如果循环能够等待 switch case 完成后再继续,那就更理想了。

无论如何,这是我认为应该实现的方式,但它似乎不起作用,所以也许有更好的方法来实现莫尔斯电码生成器,或者我只是错过了一个步骤,所以如果有人可以的话请帮我解决这个问题,我将非常感激。

- (NSString *)convertTextToMorse:(NSString *)phrase {

for (int i = 0; i < [phrase length]; i++) {

unichar ch;
ch = [phrase characterAtIndex:i];
NSLog(@"Processing charachter %c",ch);

//Dot = 100ms
//Dash = 300ms
//Pause = 200ms

switch (ch) {
case 'a':
//Morse "a"
[self playDotSound];
[self performSelector:@selector(playDashSound) withObject:nil afterDelay:0.2];
break;
case 'b':
//Morse "b"
break;
default:
break;
}
}

return phrase;

}

最佳答案

另一种选择可能是在单独的线程上运行整个事情:

- (NSString *) convertTextToMorse:(NSString *)phrase {
[self performSelectorInBackground:@selector(morseInternal:) withObject:phrase];
return phrase;
}

- (NSString *) morseInternal:(NSString *)phrase {
NSAutoreleasePool *pool = [NSAutoreleasePool new];
for (int i = 0; i < [phrase length]; i++) {
if (stopMorse) {
break;
}
unichar ch = [phrase characterAtIndex:i];
NSLog(@"Processing charachter %c",ch);
switch (ch) {
case 'a':
[self playDotSound];
[self pause];
[self playDashSound];
break;
case 'b':
//Morse "b"
break;
default:
break;
}
}
[pool release];
}

- (void) pause {
[NSThread sleepForTimeInterval:0.2];
}

注意,我添加了一个 stopMorse bool 实例变量,如果您想在字符串中间停止莫尔斯电码生成,可以将其设置为 true。

关于iphone - 我如何/将实现莫尔斯电码生成器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4063769/

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