我有一个接近完善的 GPA 计算器项目。尽管“.0123456789”是唯一允许的字符,但我需要防止用户输入非浮点数。例如,如果用户输入 2.3。无论出于何种原因,我的程序崩溃了,因为这个“输入”不是浮点数。我在下面包含了我的代码的基础。
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
var allowed = CharacterSet.decimalDigits
let period = CharacterSet.init(charactersIn: ".")
allowed.formUnion(period)
//UNCOMMENT when isSuperset is working
//let characterSet = CharacterSet(charactersIn: string)
//return allowed.isSuperset(of: characterSet)
// Swift 3 appropriate solution
let isSuperset = string.rangeOfCharacter(from: allowed.inverted) == nil
return isSuperset
}
@IBAction func Calculate(_ sender: AnyObject) {
// if not filled in
if Credits1TF.text == "" || Grade1TF.text == "" || CumCredits.text == "" || CumGPA.text == "" || Credits1TF.text == "." || Grade1TF.text == "." || CumCredits.text == "." || CumGPA.text == "."
{
print...
} else
{
//credits
let credit1 = Float(Credits1TF.text!)!
//grades
let grade1 = Float(Grade1TF.text!)!
//math
let firstgrade = credit1 * grade1
我将如何着手在文本字段中添加仅接受一位小数点,因为它与文本字段功能相关?还是有更简单/直接的方法?
更新1:
let credit1 = Float(Credits1TF.text!)!
if credit1 != nil
{
let newcredits1 = credit1
//grades
let grade1 = Float(Grade1TF.text!)!
if grade1 != nil
{ let newgrade1 = grade1
除非我做错了,否则我会收到警告“将'Float'类型的非可选值与nil进行比较总是返回true”。我的印象是,如果 credits1 或grade1 != nil,我的数值很好,以后不会导致崩溃。