在Swift中从string转换为int

时间:2016-03-30 02:06:05

标签: ios swift cocoa-touch swift2

所以,我已经查看了有关此问题的所有其他问题,并且我试图实施建议的解决方案,但无济于事。我在视图控制器中有两个文本字段,用户输入数字,然后允许执行两个数字的加法或减法。除非我弄错了,否则文本字段是字符串,需要在计算完成之前转换为整数。我虽然没有运气。任何正确方向的建议都将非常感谢。以下是适用的代码:

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)
}

4 个答案:

答案 0 :(得分:4)

文本字段包含一个字符串(在其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)"
    }
}

答案 1 :(得分:3)

    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。

答案 2 :(得分:1)

所以你必须明白,字符串到int的类型不匹配比 int到char 更多。 在转换过程中你可能会丢失一些,但据我所知,我们推动使用:) 对于使用整数,你可以用构造函数初始化一个新的var。

var string = "1234"
var number = Int(string)

如果是字符串,您必须检查属性输入的返回类型。尝试隔离字符串然后转换,因为可能你要转换对象属性而不是数据:)

答案 3 :(得分:1)

您的计算部分应该是这样的

@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()

}

你应该在行动中分配你的变量,而不是在开头