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
quelle est la valeur min et max du curseur – ZHZ
min 0 - Max 100 – zacsprint
Quelles valeurs sont affichées dans les UILabels? – satheeshwaran