1

任何人能告訴我,爲什麼下面是好的:分配在三元條件運算符產生「表達是不可轉讓」的錯誤

if (newEditingMode) { 
    dayView.dayViewIsInEditingMode = YES; 
} 
else{ 
    dayView.dayViewIsInEditingMode = NO; 
} 

但下面給出了錯誤Expression is not assignable

newEditingMode ? dayView.dayViewIsInEditingMode = YES : dayView.dayViewIsInEditingMode = NO; 
+1

你不應該在三元運算符進行分配。三元運算符應該是:' = '。整個運營商的結果將是真實或錯誤的價值。 – rmaddy 2013-04-27 18:56:52

+0

@rmaddy是的,好像括號允許它編譯,但Metabble和rickyman都在他們的答案中給出了我需要的代碼。謝謝 – 2013-04-27 19:05:18

回答

3

你可以使用括號,它會編譯。嘗試以下操作。

newEditingMode ? (dayView.dayViewIsInEditingMode = YES) : (dayView.dayViewIsInEditingMode = NO); 

但是,你不應該在三元條件本身內執行賦值;你應該用這個來代替。

dayView.dayViewIsInEditingMode = newEditingMode ? YES : NO; 

或者,在這種情況下,您可以完全刪除三元組,因爲它是多餘的。

dayView.dayViewIsInEditingMode = newEditingMode; 
+0

是的。非常感謝。這工作。 SO讓我接受你的答案。 – 2013-04-27 18:46:10

+1

不需要括號。此答案中的第一行代碼不正確。使用第二行代碼(沒有parens)或更好的,使用第三行。 – rmaddy 2013-04-27 18:58:00

+0

@rmaddy我不知道你是否說第一行是不正確的,因爲它不是執行手頭任務的正確方法,在這種情況下,我同意,或者你可以在沒有括號的情況下編譯它。澄清?另外,雖然不需要一些括號,例如第二行和第一行的第一行,爲了保持一致性,我總是在所有三個部分使用它們。如果你能夠清楚地說明你認爲應該改變上述內容,我將不勝感激。 :) – Metabble 2013-04-27 19:04:05

3

三元運算符對操作順序做了很奇怪的事情。這是一個可能的解決方案,可能有所幫助。

dayView.dayViewIsInEditingMode = (newEditingMode ? YES : NO); 

看到你在做什麼,你可以寫或者像這樣:

dayView.dayViewIsInEditingMode = newEditingMode; 
+0

謝謝,你是對的。雖然我接受了他的回答,但代言卻先到了那裏。 – 2013-04-27 18:48:59

+0

+1。這是非常接近的,你實際上指出了另一種解決方案,同時我正在編輯我的它們。 – Metabble 2013-04-27 18:50:46

相關問題