我正在开发一个简单的计算器应用程序。我有我的"文本框"用于输入和输出标签,两者都放在视图控制器中。
我想将文本框中的输入作为整数,进行一些数学计算,如乘法,然后输出到文本标签。
如何进行这样简单的计算?
使用此代码,我在行var mDeposit = enterMoneyAmount - deposit
上收到错误:
二元运营商' - '不能应用于' UITextField'类型的操作数和' Int'
import UIKit
class ViewController: UIViewController {
let fee = 1.20
let tax = 1.07
let deposit = 100
@IBOutlet weak var moneyResults: UILabel!
@IBOutlet weak var enterMoneyAmount: UITextField!
@IBAction func buttonPressed(_ sender: AnyObject) {
var mDeposit = enterMoneyAmount - deposit // Error here
var mDepositAndFee = mDeposit * fee
var mDepositAndFeeAndTax = mDepositAndFee * tax
mDepositAndFeeAndTax.text = moneyResults
}
}
答案 0 :(得分:0)
您需要将UItextLabel的文本设置为等于按下按钮后计算得到的值。
@IBAction func buttonPressed(_ sender: AnyObject) {
endingCash = ((startingCash * fee) + (endingCash * tax) + (endingCash + deposit))
moneyResults.text = endingCash
}
答案 1 :(得分:0)
您收到该错误是因为您目前正在尝试从Int
中减去UITextField
。您需要从enterMoneyAmount文本字段中获取文本,并将String?
转换为Int
,或处理输入错误的情况。例如:
@IBAction func buttonPressed(_ sender: AnyObject) {
guard let moneyAmountString = enterMoneyAmount.text,
let moneyAmountInt = Int(moneyAmountString)
else {
//either moneyAmountString or moneyAmountInt is nil
//handle that input error here
return
}
//enterMoneyAmountInt is now a valid Int
var mDeposit = enterMoneyAmountInt - deposit
/*the rest of your code here */
}
这是swift 3语法。如果写下面的swift 3,请删除守卫声明中的第二个'let'。
答案 2 :(得分:0)
您不能将UITextField视为Int(或Double或任何类型的数字)。
UITextFields的属性文本包含String类型的值。
您需要提取字符串值并将其转换为int:
@IBOutlet weak var moneyResultsLabel: UILabel!
@IBOutlet weak var enterAmountField: UITextField!
@IBAction func buttonPressed(_ sender: AnyObject) {
let enteredAmountString = enterAmountField?.text ?? ""
let enteredAmount: Double = Double(enteredAmountString) ?? 0
var mDeposit = enteredAmount - deposit
var mDepositAndFee = mDeposit * fee
var mDepositAndFeeAndTax = mDepositAndFee * tax
moneyResultsLabel.text = String(mDepositAndFeeAndTax)
}
我重新命名了你的网点,以明确它们是什么。 (文本字段和标签。)使用类似enterMoneyAmount
的名称可以让您认为变量保持不变,并且不会指向收集用户输入的文本字段。
我还编写了我的代码,将输入值转换为浮点类型,这样用户就可以输入美元和美分的金额。 (或任何带小数的货币金额。)
该行
let enteredAmount: Double = Double(enteredAmountString) ?? 0
使用??
,这是" nil合并运算符"。它说"如果左边的表达式不是零,请不要管它。如果为零,请将其替换为右侧的表达式。因此,如果enteredAmountString
无法转换为Double(因为它包含" xyz",例如。),那么Double(enteredAmountString)
将评估为nil。在这种情况下,它将被替换为零。