Обращение к значениям BOOL в методах Objective-C - PullRequest
3 голосов
/ 28 июля 2011

это небольшая часть кода:

@interface
BOOL isCarryingmallet;

@implementation

-(BOOL)isCarryingWeapon {
   return isCarryingMallet;
}

-(int)getWeaponDamage {
    if (isCarryingMallet) 
        return kVikingMalletDamage;
    else
        return kVikingFistDamage;
}

Я не понимаю, как это работает.return isCarryingmMallet; возвращает ДА ​​или НЕТ?Почему нет == YES, если (isCarryingMallet)?Почему это if (isCarryingMallet) не if (isCarryingWeapon).Спасибо за ответы на мои новые вопросы!

Ответы [ 4 ]

4 голосов
/ 28 июля 2011

Метод isCarryingWeapon возвращает значение переменной isCarryingMallet. Если бы было другое возможное оружие, этот метод мог бы вернуть более сложное значение, такое как (isCarryingMallet || isCarryingPlasmaCannon). По сути, сейчас единственным оружием, которое имеет значение для этого класса, является молоток. Когда вызывается метод isCarryingWeapon, этот класс говорит себе: «Я несу молоток?» Если это так, он знает, что у него есть оружие, поэтому он возвращает истину - «Да, у меня есть оружие». В противном случае возвращается false.

Что касается вопроса if - все операторы if определяют, является ли значение в скобках значением true или false. Утверждения равенства довольно распространены в утверждениях if, но они совсем не обязательны. Более конкретно, все, что не равно 0, нулю или нулю, является истинным. Таким образом, следующее будет выполнять код в фигурных скобках:

if (1) {...}
if (37) {...}
if (YES) {...}
if (true) {...}

Булевы переменные часто называются с префиксом is, так что это имеет естественный грамматический смысл. В вашем случае вы можете разобрать

if (isCarryingMallet) {...}

в

Если этот парень носит молоток, тогда ...

0 голосов
/ 14 августа 2013

Возвращает ли isCarringMallet; "вернуть ДА или НЕТ?

Вы имеете в виду, какое значение возвращается?Мы не знаемЗначение не задано в вашем фрагменте кода .

Ваш фрагмент кода предполагает, что где-то еще мы найдем некоторый код, устанавливающий эту переменную в YES или NO (на самом деле это числа, а не текст или истинное логическое значение, поскольку в C и Objective-C отсутствует истинное логическое значение).*

0 голосов
/ 28 июля 2011

Почему в "if (isCarringMallet)" нет "== YES"?

По умолчанию операторы внутри , если выполняются, только если условие истинно. Таким образом,

if (isCarryingMallet) { /* ... */ }

В зависимости от значения isCarryingMallet операторы выполняются. Думай так -

if ( true ) { /* ... */ } // if isCarryingMallet value is true
0 голосов
/ 28 июля 2011

метод isCarryingWeapon возвращает значение isCarryingSword логическое значение.

В методе getWeaponDamage вам не нужно делать явное сравнение, такое как isCarryingMallet == TRUE, потому что оператор if будет напрямую проверять значение isCarryingMallet, и это значение будет использоваться как результатсравнение.Другими словами, если это ИСТИНА, то оператор if будет вести себя так же, как если бы он произвел сравнение между двумя значениями, и это сравнение вернуло ИСТИНА.

...