Как сделать заявление Else If более подходящим, Xcode 4 iOS - PullRequest
0 голосов
/ 31 января 2012

У меня серьезное длинное предложение, если в нем есть ссылки и текст.Это для Xcode 4, iOS 5 РЕДАКТИРОВАТЬ:

stationList = [[NSMutableArray alloc] init];
[stationList addObject:@"Q-dance Radio"];
[stationList addObject:@"The Voice"];
(ect ...)
[stationList sortUsingFunction:compareLetters context:nil];


[tableView deselectRowAtIndexPath:indexPath animated:YES];

    if ([[stationList objectAtIndex:indexPath.row] isEqual:@"Q-dance Radio"])
    {
        [player pause];
        NSString *u = @"LINK TO Q DANCE RADIO";
        NSURL *url = [NSURL URLWithString:u];
        player = [[AVPlayer alloc] initWithURL:url];
        [player play];

    }else if{
        [player pause];
        NSString *u = @"LINK TO THE VOICE";
        NSURL *url = [NSURL URLWithString:u];
        player = [[AVPlayer alloc] initWithURL:url];
        [player play];

    } (ect ...)

Как я могу сделать это лучше или сделать так, чтобы он находил нажатый быстрее, так что он не должен работатьвесь список.

Заранее спасибо

1 Ответ

1 голос
/ 31 января 2012

Вы можете использовать NSDictionary и использовать статические строки в качестве ключей.Я думаю, что вы получите хорошее ускорение от этого.(Поисковый словарь, вероятно, хэширует входную строку, которую вы используете в качестве ключа.)

Если вы покажете больше подробностей, я, вероятно, могу дать более подробный ответ.Например, вы можете даже сохранить код «сделать что-то здесь» как блок в стиле ^ {}.

ОБНОВЛЕНИЕ Я сейчас на своем компьютере и могу сослаться на какой-то реальный код для вас.Это основано на том, что я уже сделал.Ваш код может быть изменен следующим образом:

xxxList = [[NSMutableArray alloc] init];
xxxListActionDictionary = [[NSMutableDictionary alloc] initWithCapacity:10];  // add this line
[xxxList addObject:@"TEXT HERE"];
[xxxListActionDictionary 
    setObject:
          [[^{
              // DO SOMETHING HERE. THIS IS A BLOCK. SOME CODE TO BE EXECUTED.
          } copy] autorelease]    // I don't think you need autorelease if you use ARC
    forKey:@"TEXT HERE"];   // TEXT HERE is the same text put into the xxxListArray

ect.

[tableView deselectRowAtIndexPath:indexPath animated:YES];

// Here is where it gets efficient.
// The next three lines of code replace the entire if-else if...
void (^action)(void) = [xxxActionDictionary objectForKey:[[xxxList objectAtIndex:indexPath.row]];  
if (action != nil) // you want to make sure the key is in the dictionary. may not be needed in your case.
    action();  // this executes the block

ОБНОВЛЕНИЕ

stationList = [[NSMutableArray alloc] init];

[stationList addObject:@"Q-dance Radio"];
[stationListDictionary setObject:@"http://whateverQDanceRadioIs.com/folder/..." forKey:@"Q-dance Radio"];

[stationList addObject:@"The Voice"];
[stationListDictionary setObject:@"http://whateverTheVoiceIs.com/folder/..." forKey:@"Q-dance Radio"];

(ect ...)


[tableView deselectRowAtIndexPath:indexPath animated:YES];


[player pause];
NSString *u = [stationListDictionary objectForKey[stationList objectAtIndex:indexPath.row]];
NSURL *url = [NSURL URLWithString:u];
player = [[AVPlayer alloc] initWithURL:url];
[player play];
...