2010-08-03 109 views
1

爲什麼,在以下的代碼:iPhone UISlider問題

-(IBAction)updateSlider:(id)sender { 
UISlider *slider = (UISlider *) sender; 
int amount = (int)(slider.value); 

NSString *newText = [[NSString alloc]initWithFormat:@"%d", amount]; 

sliderLabel.text = newText; 
newText.release; 

}

行 「INT量=(int)的(slider.value);」是這樣嗎?爲什麼不能簡單地「int amount = int slider.value」???

回答

0
int amount = int slider.value 

這不是合法的C,對編譯器沒有任何意義,它會產生一個錯誤('int'之前的期望表達式)。的

int amount = (int)(slider.value); 

的含義是,命名量int類型的自動變量正在聲明並分配一定的價值,是slider.value的浮點值的整數轉換。 slider.value的類型是float - 您可以將float分配給int,但會得到警告。使用(int)執行從float到int的強制轉換,丟棄數字的小數部分。

演員比'。'具有更低的優先權。運營商,所以你也可以使用

int amount = (int)slider.value; 

您可以使用

int amount = slider.value; 

,並忽略警告。但是由於滑塊的默認值是從0.0到1.0,你可能不想這樣做,它可能不會給你一個有用的結果。同樣由於演員的性質(捨棄小數部分),結果可能始終爲零。花車可以做一些棘手的事情 - 如果你比較它們或測試平等,例如你通常定義一個可接受的差異,看看它們是否接近,不是絕對平等。

0

如果沒有括號,則(int)將僅適用於該聲明,在這種情況下將只有slider,不slider.value解析後的第一個對象。

另外,糾正我,如果我錯了,但不是UISliders只能從0.0到1.0?從這個獲得一個int值是相當無用的(0或1),對吧?

+0

'。' (成員)的優先級最高,而(cast)的優先級最高 - 所以如果省略括號,(int)將應用於slider.value,而不僅僅是滑塊。 – 2010-08-03 03:27:33