如果UITextField为空或为零,则返回Double

时间:2017-02-05 07:55:02

标签: xcode swift3 uitextfield

我所做的一切,尝试啊啊啊,在解开一个可选值时给我发现致命错误。

是的我知道你永远不应该强行解开,但是xcode迫使我把该死的!

我有一个输入字段,我从另一个函数调用,必须返回Double

@IBOutlet weak var inputField: UITextField!

// viewDidLoad():
inputField.keyboardType = .decimalPad

// Fail!
func returnDouble() -> Double {
 guard let f = inputField.text else {return 0.00 }
 return Double(f)! 
}

// Fail!
func returnDouble() -> Double {
 // if let f = (inputField.text?.characters.count)! > 0 {} // mega fail
 guard let f = inputField.text else {return 0.00 }
 return Double(f)! 
}

// Fail!
func returnDouble() -> Double {
    if let f = inputField.text {
        return Double(f)!
    } else {
        return 0.00
    }
}

我在这一点上输了。如果输入字段为空,我应该0.0或者如果不是,则输入值。我也试过了inputField.hasText但是我被迫添加!并且它也崩溃了。还有第二只眼睛吗?

1 个答案:

答案 0 :(得分:0)

这听起来可能违反直觉。

如果您在文字字段为空时访问textField.text,则会获得""而不是nil

您的所有三次尝试都会检查文字是nil。但由于文本字段的文本几乎从不nil,因此您的保护语句总是成功。

现在您拥有包含值f的变量""。您将其传递给Double初始值设定项。你基本上是在写:

Double("")!

好吧,Double("")失败并返回nil,然后强行打开它。 BOOM!

你要检查的是一个空字符串:

func returnDouble() -> Double {
    if inputField.text != "" {
        return Double(f)! 
    } else {
        return 0.00 
    }
}