【问题标题】:Unable to check for empty textfields in IOS swift app无法检查 IOS swift 应用程序中的空文本字段
【发布时间】:2021-02-19 00:24:42
【问题描述】:

我正在尝试使用快速故事板检查 IOS 应用程序登录页面中的空白字段。代码贴在下面:

@IBOutlet weak var firstNameTextField: UITextField!
 if (firstNameTextField.text?.isEmpty)! ||
        (lastNameTextField.text?.isEmpty)! ||
        (emailTextField.text?.isEmpty)! ||
        (passwordTextField.text?.isEmpty)!{
        userMessage(userMessage: "All fields are required")
        return
    }

我收到错误:

线程 1:致命错误:在隐式展开可选值时意外发现 nil

谁能让我知道我在这里做错了什么

【问题讨论】:

  • 与问题直接无关,但有更好的方法来检查有文本hasText 属性。但是,如果未连接插座,它不会修复其他地方的崩溃。

标签: ios swift


【解决方案1】:

请确保所有插座均已正确连接。

问题

崩溃的可能原因是..

  • firstNameTextField.text?.isEmpty 的结果可能为 null,而您已使用 ! 解包,因此它崩溃了

  • 或者IBOutlet 可能没有连接到情节提要中的视图控制器。

解决方案

您可以像下面这样使用if-let...

let fanme = firstNameTextField.text ?? ""
let lname = lastNameTextField.text ?? ""
let email = emailTextField.text ?? ""
let password = passwordTextField.text ?? ""

if fname.isEmpty || lname.isEmpty || email.isEmpty || password.isEmpty {
    userMessage(userMessage: "All fields are required")
    return
}

【讨论】:

  • 谢谢,这行得通。有连接问题。删除初始化程序并再次添加它们。
  • “@IBOutlet weak var firstNameTextField”旁边的单选按钮之类的东西一直未被选中。如何在不删除再添加的情况下重新连接?
  • 我认为,它不应该自动取消选中 @IBOutlet 旁边的单选按钮。连接后,它不会自动取消选中。是的,加载可能需要一些时间,但据我所知,它不会自动取消选中
  • 它对我来说一直不受检查。我是新手,也许我做错了什么。总之谢谢!
【解决方案2】:

您必须打开变量并检查 tf 是否为空:

@IBOutlet weak var firstNameTextField: UITextField!
@IBOutlet weak var lastNameTextField: UITextField!
@IBOutlet weak var emailTextField: UITextField!
@IBOutlet weak var passwordTextField: UITextField!

现在编写要检查的函数:

@objc func chekTfIsEmpty () {
    guard let firstTF = firstNameTextField.text else { return } // unwrapped
    guard let lastNameTF = lastNameTextField.text else { return } // unwrapped
    guard let emailTF = emailTextField.text else { return } // unwrapped
    guard let passTF = passwordTextField.text else { return } // unwrapped
    
    if firstTF.isEmpty ||
        lastNameTF.isEmpty ||
        emailTF.isEmpty ||
        passTF.isEmpty {
        userMessage(userMessage: "All fields are required") 
        return
    } else {
        // do your stuff here
    }
}

然后使用您的登录按钮调用此函数...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多