2010-08-03 4 views
1

Pourquoi est-ce que dans le code suivant:iPhone UISlider question

-(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; 

}

la ligne "int = montant (int) (slider.value);" c'est comme ça? Pourquoi ne pourrait-il pas être simplement "int amount = int slider.value" ???

Répondre

0
int amount = int slider.value 

Ce n'est pas C juridique et n'a pas de sens au compilateur, il produira une erreur (expression attendue avant « int »). La signification de

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

est qu'une variable automatique du type int quantité nommée est déclarée et assigné une certaine valeur, soit la distribution de nombre entier de la valeur à virgule flottante de slider.value. Le type de slider.value est float - vous pouvez assigner un float à un int mais vous recevrez un avertissement. L'utilisation de (int) effectue une conversion de float en int, en supprimant la partie fractionnaire du nombre.

Cast a une précision inférieure à '.' opérateur de sorte que vous pouvez également utiliser

int amount = (int)slider.value; 

Vous pouvez utiliser

int amount = slider.value; 

et ignorer l'avertissement. Mais puisque les valeurs par défaut d'un curseur sont de 0.0 à 1.0, vous ne voudrez peut-être pas le faire, cela ne vous donnera probablement pas un résultat utile. De plus, à cause de la nature de la distribution (élimination de la partie fractionnaire), le résultat peut toujours être nul. Les flotteurs peuvent faire des choses délicates - si vous les comparez ou si vous testez l'égalité par exemple, vous définissez généralement une différence acceptable et vous voyez s'ils sont si proches, pas absolument égaux.

0

S'il n'y avait pas entre parenthèses, la (int) s'appliquerait seulement le premier objet après cette déclaration analysable, qui dans ce cas serait queslider, non slider.value.

Aussi, corrigez-moi si je me trompe, mais les UISliders ne vont-ils que de 0.0 à 1.0? Obtenir une valeur int de ceci est assez inutile (0 ou 1), non?

+0

'.' (membre) a la plus haute priorité alors que (cast) a le deuxième plus haut - donc le (int) s'appliquerait à slider.value, pas seulement au slider, si les parenthèses étaient omises. –