Синтаксис операторов или & и

каков правильный синтаксис для объединения и & или операторов?

Я пытаюсь реализовать некоторый код для проверки данных, которые вводит пользователь. У меня есть сегментированный элемент управления, текстовое представление и кнопка следующей страницы. Чтобы перейти к следующему контроллеру представления, пользователь должен выбрать «да» или «нет» в сегментированном элементе управления, и если выбрано «да», он должен ввести некоторый текст в текстовое представление.

- (IBAction)nextPageButton:(UIBarButtonItem *)sender {

if (weatherDelayString == nil || ([weatherDelayString isEqual: @"YES"] && weatherDelayTextView.text == nil)) {
    NSLog(@"nothing selected");
}else{
    vc7Signature *vc7 = [[vc7Signature alloc]initWithNibName:nil bundle:nil];
[self presentViewController:vc7 animated:YES completion:nil];
}}

Может ли кто-нибудь прояснить синтаксис, необходимый для реализации этой логики?


person BBringardner    schedule 14.05.2013    source источник
comment
Какой язык вы используете?   -  person Cramer    schedule 14.05.2013
comment
Objective C (но я впервые пишу такие заявления). || работал правильно в другом месте моего проекта, но я не смог получить || и && работают вместе.   -  person BBringardner    schedule 14.05.2013


Ответы (3)


Почему бы не распутать/распутать ваш код, чтобы избавиться от некоторых случаев И и ИЛИ. Я могу сделать это с помощью одного И:

- (IBAction)nextPageButton:(UIBarButtonItem *)sender {

    if ([weatherDelayString isEqual: @"YES"] && ([weatherDelayTextView.text length] > 0))
    {
        vc7Signature *vc7 = [[vc7Signature alloc]initWithNibName:nil bundle:nil];
        [self presentViewController:vc7 animated:YES completion:nil];
    } else {
        NSLog(@"the YES / NEXT condition I want the users to have to go forward isn't selected");
    }
}

Что, надеюсь, легче читать, чем ИЛИ плюс вложенное И условное.

person Michael Dautermann    schedule 14.05.2013
comment
Спасибо за помощь. На самом деле ваша строка [weatherTextView.text length]›0 добилась цели. Я не знал о длине и увидел, что допустил ошибку в своем коде. Спасибо! - person BBringardner; 14.05.2013

Поместите каждое решение в скобки, чтобы оно было абсолютно ясным. Итак, у вас на данный момент

A || B && C

в то время как вы должны ввести

(A || B) && C

or

A || (B && C)

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

person Cramer    schedule 14.05.2013
comment
В то время как мой ответ отвечает на вопрос напрямую, ответ Майкла Даутерманна - лучший (более легко читаемый) код. - person Cramer; 14.05.2013

Используйте этот,,,

- (IBAction)nextPageButton:(UIBarButtonItem *)sender 
{
        if ((weatherDelayString == nil || [weatherDelayString isEqual: @"YES"]) && weatherDelayTextView.text == nil)
        {
            NSLog(@"nothing selected");
        }
        else
        {
            vc7Signature *vc7 = [[vc7Signature alloc]initWithNibName:nil bundle:nil];
            [self presentViewController:vc7 animated:YES completion:nil];
        }
}
person Dharmbir Singh    schedule 14.05.2013
comment
это не сработает, потому что единственный способ нажать - это WeatherDelayString NO, а это не то, чего хотел ОП. - person Michael Dautermann; 14.05.2013