我知道使用的語法是這樣的:問號「如果」符號
(something) ? TRUE : FALSE
但是,如果我想返回檢驗變量是什麼?例如:
是否有像第一行代碼這樣的語法呢?
當然,我知道,我可以簡單地做一些事情像:
([myVar objectForKey:objectName]) ? return [myVar objectForKey:objectName] : return -1;
但這AFAIK很醜陋的解決方案
我知道使用的語法是這樣的:問號「如果」符號
(something) ? TRUE : FALSE
但是,如果我想返回檢驗變量是什麼?例如:
是否有像第一行代碼這樣的語法呢?
當然,我知道,我可以簡單地做一些事情像:
([myVar objectForKey:objectName]) ? return [myVar objectForKey:objectName] : return -1;
但這AFAIK很醜陋的解決方案
關閉我的頭頂,我認爲這應該(編輯:但見andyvn22的答案回覆:返回類型):
id foo;
return (foo = [myVar objectForKey:objectName]) ? foo : -1;
作爲一般規則,不過,你」使用易於理解的符號幾乎總是更好,而不是稍微簡潔但含糊不清的符號。
我不知道你問什麼,但你總是可以這樣做:
id foo = [myVar objectForKey:objectName];
return (foo) ? foo : -1;
或
return [myVar objectForKey:objectName] ? [myVar objectForKey:objectName] : -1;
Oooo返回開始。謝謝,但我對此感到懷疑。也許它是微不足道的,但是最好創建一個變量(就像你在第一行代碼中做的那樣)或者從字典中獲取對象兩次?我知道這兩種方法都有效,但對記憶更好? – Kuba
我不認爲對記憶的影響會太不同。在第一種情況下,你正在堆棧上分配一個指針。這隻有8個字節。在第二種情況下,你調用了兩次'objectForKey:'方法。這是一個性能差異,但可能不是一個大的,除非它在一個內部循環內。 – user1118321
你說得對,後面的例子*可能會*調用'-objectForKey:'兩次,但是任何區別都會非常小,以至於不能關心它們 - 使用哪種格式最具可讀性*。如果我們正在討論'返回[myVar ridiculouslySlowMethod]? [myVar ridiculouslySlowMethod]:-1',*然後*你可能想要我們的第一個版本。 – andyvn22
有是使用三元運算符一個簡單的方法(這是什麼? :
語法稱爲)在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原語 - 這個具體例子看起來很腥。
優秀點 – walkytalky
感謝您的名字!現在我知道我在找什麼。我知道類型,這是一個普遍的問題,而不是返回類型的問題。 – Kuba
該語法完全是我在找什麼。但我必須在* if *聲明之外聲明它?我不能在*中聲明* if *? – Kuba
不記得範圍規則對於這樣的聲明意味着什麼,但我認爲它不會起作用。你可以試試看看? – walkytalky
你是對的,沒有工作;) – Kuba