我正在尝试实时计算UISlider
的值,但我在Swift 2
中遇到错误。这是一个简单的温度转换应用程序。有人可以看一下吗?
@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)"
}
答案 0 :(得分:1)
缺少运算符'*'后的空格,它应该可以正常工作
let tempF = tempC * 9/5+32
答案 1 :(得分:0)
为什么 Swift在这里产生错误(不仅仅是如何避免它),这可能是有意义的。
在Swift中的许多错误消息中,感兴趣的实际错误被其他错误消息混淆,在这种情况下是有些标准的'consecutive statments ...'
消息。但是,核心错误是没有一元(前缀)运算符*
。后续错误给出了一元前缀运算符*
存在的情况,表达式'tempC *9/5+32'
将减少为(假设此{{的优先级高) 1}}一元运算符)*
('tempC IL/5+32'
整数文字),这自然是错误的,就像表达式IL
一样。
现在,一元前缀运算符存在于例如'let a: Int = 1 1'
和+
:
-
如果操作符紧跟在其目标之前并且如果没有其他操作数出现在其自身之前,则Swift会将操作符推断为一元。如果它在其自身之前找到另一个操作数,则它将操作符推断为二进制。请看以下示例:
/* '+' 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 Language Guide - Basic Operators:
一元运算符在单个目标(例如-a)上运行。一元前缀 运算符出现在它们的目标之前(例如!b),和 一元后缀运算符在其目标后立即出现(例如 我++)。
这里的教训是密切注意表达式,其中运算符以无意义的一元前缀(或后缀)方式使用,以避免混淆来自Swift的混淆错误消息。
最后,请注意我们可以自然地定义我们自己的前缀一元运算符,以防我们发现它们丢失
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 */