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