2016-09-06 73 views
-1

我正試圖用簡單的calculator-app學習編程。我的代碼總是出現錯誤,即使我嘗試了在該平臺上找到的所有內容,它也不會工作。願有人幫助我嗎?我正在使用Swift。我在xcode 7.3.1中的計算器代碼不起作用,我該怎麼辦?

@IBOutlet weak var number1: UITextField! 
@IBOutlet weak var number2: UITextField! 
@IBOutlet weak var operatorSegment: UISegmentedControl! 
@IBOutlet weak var resultLabel: UILabel! 
@IBAction func calculateButton() { 
    let firstnumber = Int(number1) 
    let secondnumber = Int(number2) 
    switch operatorSegment.selectedSegmentIndex { 
    case 0: 
     resultLabel.text = firstnumber + secondnumber 
    case 1: 
     resultLabel.text = firstnumber - secondnumber 
    default: 
     resultLabel.text = "Error" 
    } 
+2

'我的代碼總是收到一個錯誤,它不會工作'請詳細說明錯誤。 – JAL

+2

我想它試圖將UITextField轉換爲Int,這不太可能工作。 –

+0

嘗試改變:'let firstnumber = Int(number1.text)'..如果這不能解決它,那麼編輯你的Q,並給出它給出的錯誤 – Dravidian

回答

0

我看到的一個問題是在switch語句中,您直接將Ints傳遞到文本字段的文本字符串中。

resultLabel.text = firstnumber + second number 

您首先需要在將字符串傳入文本字段之前先將字符串轉換爲字符串。之後,switch語句應該看起來像這樣。

switch operatorSegment.selectedSegmentIndex { 
    case 0: 
     resultLabel.text = "\(firstnumber + second number)" //String 
    case 1: 
     resultLabel.text = "\(firstnumber - second number)" //String 
    default: 
     resultLabel.text = "Error" 
} 
0

所有我會簡單地認爲Int(number1)Int(number2)都返回有效Int年代的第一次。如果沒有,那麼你有另一個問題。

的主要問題是,你不能將一個Int(或Int小號和你的情況)到預期的類型String這是什麼resultLabel.text期待。

//  String =  Int  +  Int  <- Not allowed 
resultLabel.text = firstnumber + secondnumber 

您可以計算值並內插,或乾脆實例化新的字符串對象與在其內的計算。例如

EX#1:resultLabel.text = String(firstnumber + secondnumber)

EX#2:resultLabel.text = "\(firstnumber + secondnumber)"

1
  1. 要訪問你需要使用.text屬性的文本字段的值,所以你需要改變Int(number1)Int(number1.text!)與同爲number2
  2. 您應該執行guard letif let檢查以確保這些值不爲零並且可以轉換爲整數。
  3. 您可以將Int值不分配給您的resultLabel.text,您需要將結果轉換到一個String,像這樣:resultLabel.text = "\(firstnumber + secondnumber)"

隨着所有這些考慮最終代碼爲您calculateButton功能應該是像這樣:

@IBAction func calculateButton() { 

    guard let firstnumber = Int(number1.text!) else { 
     // number1 can't be converted to an integer 
     resultLabel.text = "Error" 
     return 
    } 
    guard let secondnumber = Int(number2.text!) else { 
     // number2 can't be converted to an integer 
     resultLabel.text = "Error" 
     return 
    } 

    switch operatorSegment.selectedSegmentIndex { 
    case 0: 
     resultLabel.text = "\(firstnumber + secondnumber)" 
    case 1: 
     resultLabel.text = "\(firstnumber - secondnumber)" 
    default: 
     resultLabel.text = "Error" 
    } 

}