簡體   English   中英

在Swift中從string轉換為int

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM