2016-01-08 36 views
2

我試圖實時計算UISlider的值,但在Swift 2中有錯誤。這是一個簡單的溫度轉換應用程序。有人可以看看嗎?在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

什麼滑塊 – ZHZ

+0

最小0的最小和最大值 - 最大100 – zacsprint

+2

UILabels中顯示的值是什麼? – satheeshwaran

回答

1

操作後空間 '*' 丟失,它應該工作

let tempF = tempC * 9/5+32 
0

這可能是利益爲爲什麼斯威夫特此處得到一個錯誤(不只有如何避免它)。在夫特


正如許多錯誤消息,所關注的實際錯誤是由其他錯誤消息混淆,在這種情況下,有些標準'consecutive statments ...'消息。然而,這裏的核心錯誤是沒有一元(前綴)運算符*。給出,其中一元前綴操作者*均存在的情況下的後續錯誤,,是表達'tempC *9/5+32'將減少到(假設高優先此*一元運算符)'tempC IL/5+32'IL整數文字),這是自然的錯誤,就像表達式'let a: Int = 1 1'一樣。

現在,一元前綴運算符存在於例如+-

/* '+' 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 */ 

斯威夫特推斷,如果它的目標之前,如果沒有其他操作會立即出現本身之前立即出現一個操作員是一元。如果它在其本身之前發現另一個操作數,則它將操作符推斷爲二進制。採取下面的例子:

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 */ 

參見Swift Language Guide - Basic Operators對於細節:

一元運算符對一個目標進行操作(如-a)。一元前綴 運算符在它們的目標(例如!b)之前立即出現,並且 一元后綴運算符在它們的目標之後立即出現(例如 i ++)。

這裏的一個教訓是要非常注意表達式,其中操作符在一元前綴(或後綴)方式中被無意使用,以免被Swift中混淆的錯誤消息弄糊塗。


最後請注意,我們可以自然的情況下,我們自己定義的前綴元運算符,我們發現他們缺少

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