2013-11-27 4 views
-1

все,Странное заявление о возврате в C/Цель C

Я новичок в C/Objective-C, и я выполняю некоторые упражнения в Xcode. На самом деле это была вторая лекция из Stanford iTunes.U CS 193 курс iOS осенью 2013 года, если кто-то знаком с ...

Упражнение просило создать объект для класса Card.

Таким образом, в файле .h он заявляет:

@property (strong, nonatomic) NSString *suit; 

И в .m файл он перегрузили геттер:

-(NSString *)suit 
{ 
    return _suit ? _suit : @"?"; 
} 

Вот это, я не понимаю, что это оператор возврата средства ...

Согласно инструктору, метод геттера предотвращает использование свойства костюма ноль. Но я попытался использовать следующий код вместо кода выше, это не сработало.

-(NSString *)suit 
{ 
    if (!_suit) 
     return _suit; 
    else 
     return @"?"; 
} 

Так два вопроса:

1,

return _suit ? _suit : @"?";

что делает это возвращение заявление означает?

2, Почему мой код не работает?

Оценка!

+0

Проверить http://stackoverflow.com/questions/14216384/boolean-operation-syntax –

ответ

1

изменить свой код, как следующие:

-(NSString *)suit 
{ 
    if (_suit) //if _suit exists, then return _suit. !_suit is wrong. 
     return _suit; 
    else 
     return @"?"; 
} 
+0

Я получил его .. Большое спасибо! – bing

2

Синтаксис x ? y : z называется conditional or ternary if operator. Если значение x истинно, его значение равно y, в противном случае его значение равно z.

Когда вы преобразовали его в форму if/else, вы перевернули _suit, когда вам не нужно было. Должно быть:

if (_suit) 
    return _suit; 
... 
+0

Это называется * условный * оператор. –

+0

Это было ясно. Бесконечно благодарен! – bing

+0

@MartinR Поскольку это единственный тернарный оператор в C, я обычно слышу его как трехмерный оператор. Я не думаю, что когда-либо слышал, что это называется чем-то полезным, как условный оператор, но это имеет смысл. – Xymostech

Смежные вопросы