Сравнение строки к массиву в цели-C

if (BaseActivity.this instanceof Faq)
            {
                Toast.makeText(BaseActivity.this, "You are in the Same Page", Toast.LENGTH_SHORT).show();
            }else {
                Intent intent = new Intent(BaseActivity.this, Faq.class);
                startActivity(intent);
                drawer.closeDrawer(GravityCompat.START);
            }

//// Здесь я. Все мои действия распространяются на Activity под названием BaseActivity

6
задан Sjakelien 18 June 2009 в 10:42
поделиться

3 ответа

Ваш код работает нормально. Его ужасный код, но он работает нормально, раздел // ничего не делать вызывается для любого совпадения, а раздел // делать что-то вызывается для каждого несоответствия в массиве. Я подозреваю, что проблема в том, что вы ожидаете, что раздел // ничего не делать будет выполнен один раз, если нет совпадений, и // сделать что-то раздел, который будет выполняться один раз, если есть какое-либо совпадение, что не так. Вы, вероятно, захотите:

-(void) findRedundant: (NSString *) aString {
#define ALPHA_ARRAY [NSArray arrayWithObjects: @"A", @"B", @"C", nil]
    BOOL found = NO;
    NSUInteger f;
    for (f = 0; f < [ALPHA_ARRAY count]; f++) {
        NSString * stringFromArray = [ALPHA_ARRAY objectAtIndex:f];
        if ([aString isEqualToString:stringFromArray]) {
            found = YES;
            break;
        }
    }
    if ( found ) {
        // do found
    } else {
        // do not found
    }
}

Кроме того, вы явно не понимаете макросы и то, когда вы должны и не должны их использовать (как правило, вы никогда не должны их использовать, за очень немногими исключениями). Макрос текстуально подставляется в ваш код. Это означает, что создание и инициализация массива происходит каждый раз, когда вы используете ALPHA_ARRAY. Это ужасно.

В общем, никогда не используйте #define снова (кроме констант), пока не получите более глубокое понимание того, что делаете. В этом случае вы должны создать массив, как описано в taebot:

NSArray* alphaArray = [NSArray arrayWithObjects: @"A", @"B", @"C", nil];

Затем, если вы разрабатываете для современной платформы (10.5 или iPhone), вы можете использовать Fast Enumeration, который намного проще и понятнее для чтения:

-(void) findRedundant: (NSString *) aString {
    NSArray* alphaArray = [NSArray arrayWithObjects: @"A", @"B", @"C", nil];
    BOOL found = NO;
    for ( NSString* stringFromArray in alphaArray ) {
        if ([aString isEqualToString:stringFromArray]) {
            found = YES;
            break;
        }
    }
    if ( found ) {
        // do found
    } else {
        // do not found
    }
}

И наконец, вы должны прочитать документацию по NSArray и NSString, чтобы увидеть, что вы можете делать бесплатно, а затем вы найдете такие методы, как containsObject, на которые указал KiwiBastard, и вы можете переписать свою процедуру как:

-(void) findRedundant: (NSString *) aString {
    NSArray* alphaArray = [NSArray arrayWithObjects: @"A", @"B", @"C", nil];
    if ( [alphaArray containsObject: aString] ) {
        // do found
    } else {
        // do not found
    }
}
13
ответ дан 8 December 2019 в 03:54
поделиться

#define мне кажется странным. Я думаю, что каждый раз, когда вы используете ALPHA_ARRAY, будет создаваться другой экземпляр NSArray. Было бы чище использовать метод containsObject: в NSArray:

NSArray* alphaArray = [NSArray arrayWithObjects: @"A", @"B", @"C", nil];
if (![alphaArray containsObject:aString]) {
    // do something
}
7
ответ дан 8 December 2019 в 03:54
поделиться

Я не уверен, почему ваш код выше не работает, но пробовали ли вы:

7
ответ дан 8 December 2019 в 03:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: