对此我真的很陌生,所以请多多包涵。我正在尝试制作一个简单的应用程序,将输入的数字放入等式中。我可以加法和减法,但是当涉及乘法时,我似乎无法获得正确的答案。我知道这与输入的信息不是整数和双精度有关,我不确定如何更改它。因此,如果您能以正确的语法帮助我,那就太好了!
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)"
}
}
答案 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)
Value1
,Value2
和Value3
是UITextField
。因此,它们的.text
属性是String
。对于算术运算,必须将这些字符串转换为数字:最简单的是Int
类型。如果您不希望Double
是answer
和a * 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.
在变量名value1
,value2
和value3
的开头使用小写字母。仅大写类名,结构,枚举等。
强制展开(!
)已实例化的.text
的{{1}}属性是安全的。
对于字符串插值,请使用反斜杠UITextField
。