2011-07-27 59 views
3

這是代碼的一小部分:參照BOOL值在Objective-C方法

@interface 
BOOL isCarryingmallet; 

@implementation 

-(BOOL)isCarryingWeapon { 
    return isCarryingMallet; 
} 

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

我不理解其工作原理。 return isCarryingmMallet;是否返回YES或NO?如果(isCarryingMallet)爲什麼沒有== YES?爲什麼它不是if (isCarryingWeapon)。 感謝您回答我的newb問題!

+1

Upvote強制性RPG格鬥遊戲時學習一種新的語言。我的第一個Obj-C被稱爲「中世紀戰鬥」:P –

回答

4

isCarryingWeapon方法返回isCarryingMallet變量的值。如果還有其他可能的武器,該方法可能會返回更復雜的值,如(isCarryingMallet || isCarryingPlasmaCannon)。基本上現在對這個班來說唯一重要的武器就是木槌。當調用isCarryingWeapon方法時,這個班級自己說:「我揹着一個槌子嗎?」如果是這樣,它知道它攜帶了武器,所以它返回正確 - 「是的,我有武器。」否則它返回false。

至於if問題 - 所有if語句所做的是確定括號中的值是否爲真或假。平等聲明在if語句中很常見,但根本不需要。更具體地說,任何不是0,空或零的東西都是正確的。所以下面都將在大括號執行代碼:

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

布爾變量往往與前綴is使這使得自然的語法意義的名字命名。你的情況,你可以分析

if (isCarryingMallet) {...} 

如果這傢伙拎着木槌,然後...

+0

謝謝!如果現在這個代碼在isCarryingWeapon方法不存在的情況下仍然可以運行? – stumped

+0

這一切都取決於這個類如何在其他地方使用。如果其他函數調用isCarryingWeapon,則無法擺脫它。但是,這個班一般來說沒有它,就可以正常工作。 – Luke

0

方法isCarryingWeapon返回值isCarryingSword布爾值。

getWeaponDamage方法中,您不需要執行明確的比較,如isCarryingMallet == TRUE,因爲if語句將直接檢查isCarryingMallet的值,並且該值將用作比較結果。換句話說,如果它是TRUE,那麼if語句的行爲將與兩個值之間的比較相同,並且該比較返回TRUE。

0

爲什麼「if(isCarryingMallet)」中沒有「== YES」?

默認情況下,語句中如果被執行只有在條件爲真。所以,

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

取決於isCarryingMallet值,執行該語句。認爲這樣的 -

if (true) { /* ... */ } // if isCarryingMallet value is true 
+0

ohh。那麼 - (BOOL)是Carrying武器呢? – stumped

+0

它返回isCarryingMallet的值。顯然,根據這個守則,如果一個人拿着一個木槌,他們正在攜帶一把武器。 – wadesworld

0

是否 「迴歸isCarryingMallet;」返回YES或NO?

你的意思是返回哪個值?我們不知道。值未在您的代碼代碼段中設置。

你的代碼片段假設我們會找到一些代碼將該變量設置爲YES或NO(實際上是數字,而不是文本或真正的布爾值,因爲C和Objective-C缺少真正的布爾值)。