2016-01-08 2 views
2

J'essaie de calculer des valeurs à partir d'un UISlider en temps réel, mais j'ai des erreurs dans Swift 2. C'est une application de conversion de température simple. Quelqu'un peut-il jeter un oeil s'il vous plaît?Effectuer des calculs à partir des valeurs de curseur dans Swift 2

enter image description here enter image description here

@IBOutlet var Fahrenheit: UILabel! 
@IBOutlet var Celcius: UILabel! 
@IBOutlet var sliCelcius: UISlider! 
@IBAction func changeTemp(sender: UISlider) { 
    let tempC = Int(sender.value) 
    let tempF = tempC *9/5+32; 
    Fahrenheit.text = "\(tempF)" 
    Celcius.text = "\(tempC)" 
} 
+1

quelle est la valeur min et max du curseur – ZHZ

+0

min 0 - Max 100 – zacsprint

+2

Quelles valeurs sont affichées dans les UILabels? – satheeshwaran

Répondre

1

Espace après opérateur '*' manque, il devrait fonctionner

let tempF = tempC * 9/5+32 
0

Il pourrait être intéressant pour pourquoi Swift donne une erreur ici (non seulement comment l'éviter).


Comme de nombreux messages d'erreur dans Swift, l'erreur d'intérêt réel est par d'autres brouillées messages d'erreur, dans ce cas, le message 'consecutive statments ...' un peu standard. L'erreur de noyau ici est, cependant, qu'il n'existe aucun opérateur unaire (préfixe) *. L'erreur de suivi, étant donné le cas où un opérateur unaire préfixe * devait exister, est que l'expression 'tempC *9/5+32' réduirait à (en supposant la priorité élevée pour ce * opérateur unaire) 'tempC IL/5+32' (IL littéral entier), ce qui est naturellement erronée , tout comme une expression 'let a: Int = 1 1' serait.

Maintenant, des opérateurs de préfixe unaire existent par exemple pour des + et -:

/* '+' and '-' unary (prefix) operators in action: OK */ 
let a : Int = 1 + -1    // 0, OK 
let b : Int = +(-1)    // -1, OK 
let c : Int = -(-(-(-(-(-(1)))))) // 1, OK 

let d : Int = *1 /* error: '*' is not a prefix unary operator */ 

Swift infère un opérateur d'être unaire si elle apparaît immédiatement avant sa cible et si aucun autre opérande apparaît immédiatement avant lui-même. S'il trouve un autre opérande immédiatement avant lui-même, il déduit l'opérateur comme binaire. Prenez les exemples suivants:

let e: Int = 1 + 1 // binary, OK 
let f: Int = 1+1 // binary, OK 
let g: Int = 1 +1 /* unary prefix: resulting expression 'let g: Int = 1 1' erroneous */ 
let h: Int = 1+ /* + not a postfix unary operator, erroneous */ 

Voir la Swift Language Guide - Basic Operators pour plus de détails:

opérateurs unaires fonctionnent sur une cible unique (par exemple -a). Les opérateurs de préfixe unaire apparaissent immédiatement avant leur cible (comme! B), et les opérateurs postfixes unaires apparaissent immédiatement après leur cible (tels que i ++).

La leçon ici est de garder un oeil vif pour les expressions où les opérateurs sont utilisés dans un préfixe unaire (ou Postfix) mode unintendently, pour éviter d'être confondu par des messages d'erreur obfusqués de Swift.


Enfin, notez que nous pouvons définir naturellement nos propres préfixe opérateurs unaires dans le cas où nous les trouvons à manquer

prefix operator * {} 
prefix func * (rhs: Int) -> Int { 
    return rhs*rhs 
} 
let i : Int = *2 // 4, OK