如何知道Swift中的文本字段是否为空?

时间:2015-03-29 06:03:49

标签: ios swift

我正在swift中创建一个基本的应用程序(用于学习目的),以便将猫年转化为人类年。因此,有一个名为: edadGatoTextField 的文本框,用户可以输入cat的年份,然后按 calcularEdadButtonPressed 按钮查看 mensajeLabel 中的转换年份

我试图添加一个 if 语句,以便在 mensajeLabel 中打印一条消息,告诉用户必须输入一个数字才能转换它。

- >所以,下面是代码,它应该有效,但为什么我收到错误:如果年龄

我正常运行我的应用,但在 calcularEdadButtonPressed 时崩溃,而 edadGatoTextField

中没有数字

与选项或未打包的选项有关。

class ViewController: UIViewController {

    @IBOutlet weak var edadGatoTextField: UITextField!
    @IBOutlet weak var mensajeLabel: UILabel!
    @IBOutlet weak var imagenGatoImageView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func calcularEdadButtonPressed(sender: AnyObject) {

        var age = edadGatoTextField.text.toInt()

        // *** Bellow is the error! I'm trying to figure out if user
        // has not entered any number in order to display the message.

        if age { 

            age = age * 7

            mensajeLabel.text = "Your cat's age is \(age) years!"
            mensajeLabel.textColor = UIColor.blueColor()

            edadGatoTextField.resignFirstResponder()

            imagenGatoImageView.image = UIImage(named: "cat2.jpg")

        } else {

            mensajeLabel.text = "Please enter a number!"
            mensajeLabel.textColor = UIColor.redColor()

        }

    }

}

4 个答案:

答案 0 :(得分:2)

age的类型为Int?(可选Int),因此是整数或nil。您不能将nil比较视为Swift if语句中的布尔比较。您必须明确核对nil

if age != nil {
    let humanAge = age! * 7
    //...
} else {
    //...
}

但你应该使用可选的绑定,除非你有理由不这样做:

if let age = edadGatoTextField.text.toInt() {
    let humanAge = age * 7
    //...
} else {
    //...
}

答案 1 :(得分:2)

这里有两个问题。

首先,UITextField' text属性是可选的。除非您在每次创建时手动将其设置为空字符串,否则它将为nil,直到用户在其中键入内容为止。

其次,String' toInt()方法返回一个可选的Int?。如果您调用String的{​​{1}}无法解析为整数,toInt()会返回toInt()

然后我们遇到斯图尔特的答案碰到的障碍。使用nil模式,我们必须在if let体内声明另一个变量乘以7,因为if声明了一个无法修改的常量。

然而,我们可以在一行中解决所有这三个问题。我们只需要知道if let不是唯一可用的模式。我们可以使用if let

if var

答案 2 :(得分:1)

Swift 3

如果您的文字字段为空,您可以通过此代码进行检查吗?

将目标添加到文字字段

     self.yourTextField.addTarget(self, action: #selector(textFieldDidChange(textField:)), for: .editingChanged)

现在您可以将已连接的功能与目标字段绑定。

func textFieldDidChange(textField: UITextField){
      if textField.text == "" {
           //You can perfrom your activity here when textfield got blank or empty
      }
      else
      {
           //You can perfrom your activity here when textfield got not blank or not empty 
      }

 }

答案 3 :(得分:0)

if let age = edadGatoTextField.text.toInt() {
    // Calculate cat years    
} else {
    // Show error
}

如果查看文档,UITextField.text是一个隐式解包的可选项,因此如果未初始化则可能为nil。由于'if let'和可选的链接结构,当且仅当文本不是nil并且可转换为int时才会得到'age',否则它将为nil。