2012-06-26 33 views
1

我知道使用的語法是這樣的:問號「如果」符號

(something) ? TRUE : FALSE 

但是,如果我想返回檢驗變量是什麼?例如:

​​

是否有像第一行代碼這樣的語法呢?

當然,我知道,我可以簡單地做一些事情

([myVar objectForKey:objectName]) ? return [myVar objectForKey:objectName] : return -1; 

但這AFAIK很醜陋的解決方案

回答

2

關閉我的頭頂,我認爲這應該(編輯:但見andyvn22的答案回覆:返回類型)

id foo; 
return (foo = [myVar objectForKey:objectName]) ? foo : -1; 

作爲一般規則,不過,你」使用易於理解的符號幾乎總是更好,而不是稍微簡潔但含糊不清的符號。

+0

該語法完全是我在找什麼。但我必須在* if *聲明之外聲明它?我不能在*中聲明* if *? – Kuba

+0

不記得範圍規則對於這樣的聲明意味着什麼,但我認爲它不會起作用。你可以試試看看? – walkytalky

+0

你是對的,沒有工作;) – Kuba

2

我不知道你問什麼,但你總是可以這樣做:

id foo = [myVar objectForKey:objectName]; 
return (foo) ? foo : -1; 

return [myVar objectForKey:objectName] ? [myVar objectForKey:objectName] : -1; 
+0

Oooo返回開始。謝謝,但我對此感到懷疑。也許它是微不足道的,但是最好創建一個變量(就像你在第一行代碼中做的那樣)或者從字典中獲取對象兩次?我知道這兩種方法都有效,但對記憶更好? – Kuba

+0

我不認爲對記憶的影響會太不同。在第一種情況下,你正在堆棧上分配一個指針。這隻有8個字節。在第二種情況下,你調用了兩次'objectForKey:'方法。這是一個性能差異,但可能不是一個大的,除非它在一個內部循環內。 – user1118321

+1

你說得對,後面的例子*可能會*調用'-objectForKey:'兩次,但是任何區別都會非常小,以至於不能關心它們 - 使用哪種格式最具可讀性*。如果我們正在討論'返回[myVar ridiculouslySlowMethod]? [myVar ridiculouslySlowMethod]:-1',*然後*你可能想要我們的第一個版本。 – andyvn22

2

使用三元運算符一個簡單的方法(這是什麼? :語法稱爲)在return聲明:

return [myVar objectForKey:objectName] ? [myVar objectForKey:objectName] : -1; 

它可以變得更簡潔了快速變量:

id result = [myVar objectForKey:objectName]; 
return result ? result : -1; 

但是!你在這裏的返回類型是什麼?您有可能會返回[myVar objectForKey:objectName],這是id類型,或者您將返回-1,這是NSInteger類型。一個是Objective-C對象,另一個是C原語 - 這個具體例子看起來很腥。

+0

優秀點 – walkytalky

+0

感謝您的名字!現在我知道我在找什麼。我知道類型,這是一個普遍的問題,而不是返回類型的問題。 – Kuba