Swift 4乘法问题

时间:2018-12-01 05:07:11

标签: ios swift uitextfield

对此我真的很陌生,所以请多多包涵。我正在尝试制作一个简单的应用程序,将输入的数字放入等式中。我可以加法和减法,但是当涉及乘法时,我似乎无法获得正确的答案。我知道这与输入的信息不是整数和双精度有关,我不确定如何更改它。因此,如果您能以正确的语法帮助我,那就太好了!

import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var Value1: UITextField!
    @IBOutlet weak var Value2: UITextField!
    @IBOutlet weak var Value3: UITextField!
    @IBOutlet weak var textLabel: UILabel!

    @IBAction func Result(_ sender: Any) {
        var a = self.Value1.text
        var b = self.Value2.text
        var c = self.Value3.text
        var answer = ((a) * b) / c)
        textLabel.text = "/(answer)"
    }
}

2 个答案:

答案 0 :(得分:0)

您正在尝试将字符串相乘,这是不可能的,您只能使用数字来做到这一点。 (abc * abcd = ?

Swift并不总是要求您定义变量的类型(尽管可以),因为它会自动推断类型,但您仍然不能忽略每个变量都有自己的类型。

所以这就是你写的(我虽然没有加一个感叹号,但我建议你阅读optionals

var a = value1.text!

和他的等价物(没有swift的类型猜测)是:

var a: String = value1.text!

(请注意,感叹号会取消包装value1.text中的可选值,如果value1.text == nil,它将使您的应用程序崩溃)

对于算术运算,您必须将字符串转换为数字-我们将使用Double

var a = Double(value1.text!)!

变量a的等效值现在是-

var a: Double = Double(value1.text!)!

请注意,在某些情况下无法将String强制转换为Double("abc740"的数字值是多少?), 因此,如果用户将输入其他内容,则在textFields中输入数字-使用此代码时,应用将崩溃。 为防止崩溃,建议您阻止用户输入非数字值,或阅读有关可选绑定的信息,以防止应用崩溃。

value1.text == nil的完整代码中,我将其强制转换为0,因此应用程序会将空字段视为0。

完整代码如下:

var a = Double(self.Value1.text ?? "0")!
var b = Double(self.Value2.text ?? "0")!
var c = Double(self.Value3.text ?? "0")!
var answer = a * b / c
textLabel.text = "/(answer)"

和他的等价物(没有swift的类型猜测)-

var a: Double = Double(self.Value1.text ?? "0")!
var b: Double = Double(self.Value2.text ?? "0")!
var c: Double = Double(self.Value3.text ?? "0")!
var answer: Double = a * b / c
textLabel.text = String(answer)

答案 1 :(得分:0)

Value1Value2Value3UITextField。因此,它们的.text属性是String。对于算术运算,必须将这些字符串转换为数字:最简单的是Int类型。如果您不希望Doubleanswera * b的整数商,请使用c

将字符串转换为整数可能会导致nil,因此我们将使用optional binding

if let a = Int(value1.text!),
    let b = Int(value2.text!),
    let c = Int(value3.text!) {
    let answer = (a * b) / c
    textLabel.text = "\(answer)"
}

更多备注:

    这里不需要
  • self.

  • 在变量名value1value2value3的开头使用小写字母。仅大写类名,结构,枚举等。

  • 强制展开(!)已实例化的.text的{​​{1}}属性是安全的。

  • 对于字符串插值,请使用反斜杠UITextField