[英]Converting from string to int in Swift
所以,我已經查看了有關此問題的所有其他問題,並且我試圖實施建議的解決方案,但無濟於事。 我在視圖控制器中有兩個文本字段,用戶輸入數字,然后允許執行兩個數字的加法或減法。 除非我弄錯了,否則文本字段是字符串,需要在計算完成之前轉換為整數。 雖然我對轉換沒有任何好運。 任何正確方向的建議都將非常感謝。 以下是適用的代碼:
let firstInput : Int? = Int(firstNumber)
let secondInput : Int? = Int(secondNumber)
var result = 0
@IBOutlet weak var firstNumber: UITextField!
@IBOutlet weak var secondNumber: UITextField!
@IBOutlet weak var segmentedControlCalculate: UISegmentedControl!
@IBAction func segmentedControlAddSubtract(sender: AnyObject) {
switch segmentedControlCalculate.selectedSegmentIndex {
case 0:
result = firstInput+ secondInput
case 1:
result = firstInput - secondInput
default:
return
}
updateTotalLabel()
}
func updateTotalLabel() {
total.text = "Total = " + String(result)
}
@IBOutlet weak var total: UILabel!
@IBAction func dismiss(sender: AnyObject) {
dismissViewControllerAnimated(true, completion: nil)
}
文本字段包含一個字符串(在其text
屬性中); 它本身不是一個字符串。 由於該字符串可以更改,因此每次需要時都應該詢問文本字段。
您可以使用guard let
語句來解包所有選項(因為每個文本字段的text
都是可選的,而Int
轉換也返回可選),如下所示:
class ViewController {
@IBOutlet weak var firstNumber: UITextField!
@IBOutlet weak var secondNumber: UITextField!
@IBOutlet weak var total: UILabel!
@IBOutlet weak var segmentedControlCalculate: UISegmentedControl!
@IBAction func segmentedControlAddSubtract(sender: AnyObject) {
switch segmentedControlCalculate.selectedSegmentIndex {
case 0:
operation = (+)
case 1:
operation = (-)
default:
return
}
updateTotalLabel()
}
private var operation: ((Int, Int) -> Int)?
private func updateTotalLabel() {
guard let operation = operation,
firstString = firstNumber.text,
firstInput = Int(firstString),
secondString = secondNumber.text,
secondInput = Int(secondString)
else {
total.text = "Bogus input"
return
}
let result = operation(firstInput, secondInput)
total.text = "Total = \(result)"
}
}
let text1 = "4"
let text2 = "3"
let a = Int(text1) //4
let b = Int(text2) //3
let c = a! + b! //7
print(a) //"Optional(4)\n"
print(c) //7
務必打開選項。 將String轉換為Int可能不會導致Int,因此該類型是可選的。 當然這是一個簡單的例子。 您需要首先測試是否輸入了真實的Int。
所以你必須明白,字符串到int的類型不匹配就比int更符合char 。 在轉換期間你可能會丟失一些位,但據我所知我們推動使用:)為了使用整數你可以用構造函數初始化一個新的var。
var string = "1234"
var number = Int(string)
您必須檢查屬性輸入的返回類型(如果是字符串)。 嘗試隔離字符串然后轉換,因為可能你正在轉換對象屬性而不是數據:)
你的計算部分應該是這樣的
@IBAction func segmentedControlAddSubtract(sender: AnyObject) {
// You should assign value in this stage, because there might still no value for textfield initially.
firstInput = Int(firstNumber.text)
secondInput = Int(secondNumber.text)
switch segmentedControlCalculate.selectedSegmentIndex {
case 0:
result = firstInput+ secondInput
case 1:
result = firstInput - secondInput
default:
return
}
updateTotalLabel()
}
您應該在行動中分配變量,而不是在開頭
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.