2013-04-30 95 views
4

我有以下代碼:目標C:代碼瞭解

- (IBAction)buttonSectionPressed:(id)sender { 

    if ([self.switchReloadOnlyDontToggleVissibility isOn]) { 
     [self updateCells:self.section2Cells]; 
    } else { 
     BOOL hide = ([sender tag] == 0); 
     [self cells:self.section2Cells setHidden:hide]; 
    } 

    [self reloadDataAnimated:([self.switchAnimated isOn])]; 
} 

我有

BOOL hide = ([sender tag] == 0); 

一個問題是,檢查是否(se​​nder.tag == 0),然後將其指定隱藏?所以,(如果sender.tag!= 0),隱藏不存在?

回答

8

此表達式的工作原理如下:

  • 求值[sender tag]
  • 比較結果爲零
  • 如果結果是零,hide設置爲YES;否則,它被設置爲NO

這也可以與使用屬性語法等價表達來完成:

BOOL hide = (sender.tag == 0); 

最後,你可以刪除hide變量乾脆:

[self cells:self.section2Cells setHidden:(sender.tag == 0)]; 
+4

或者另一種方式,我寧願是* BOOL hide =!sender.tag; * – 2013-04-30 22:15:57

+3

@RamyAlZuhouri如果sender.tag是一個布爾值或者是/否語法,這將是最好的選擇。但是,由於'sender.tag'是一個具有數字含義的int,所以將其與零進行比較顯然會提高可讀性。 – dasblinkenlight 2013-04-30 22:17:56

+1

這是一些非常糟糕的代碼,因爲它不是立即清楚明白髮生了什麼。你可以在C中看到這種東西(當然還有其他語言)。你應該重寫它是一個合適的if語句。 '布爾隱藏; if([sender tag] == 0){hide = YES; } else {hide = NO; }'你可以使用三元運算符,但這同樣會令人困惑。 – uchuugaka 2013-05-01 01:27:47