斯威夫特认为非零值实际上是零

时间:2019-05-08 09:43:23

标签: ios swift

我有两个文本框,passwordTextFieldemailTextField。将值输入到每个值中。当我点击print时,值将在控制台中打印。
但是,使用next函数在下一个视图控制器上填充文本框时,出现以下错误。

注意
这是在几小时前工作的,我什么也没做,所以我不确定现在如何或为什么不起作用。

@IBOutlet weak var passwordTextField: UITextField!
@IBOutlet weak var emailTextField: UITextField!
@IBOutlet weak var registerButton: UIButton!

@IBAction func registerButtonPressed(_ sender: Any) {
    let next = self.storyboard?.instantiateViewController(withIdentifier: "ABC") as! ABCViewController
    self.present(next, animated: true,completion: nil)

    let nameText = self.emailTextField.text!
    let passwordText = self.passwordTextField.text!
    print(nameText) // prints email
    print(passwordText) // prints password

    next.username.text = nameText // prints error: Unexpectedly found nil while implicitly unwrapping an Optional value
    next.password.text = passwordText
}
  

意外地发现nil,同时隐式展开一个Optional值。

但是在打印时显示非零值。

1 个答案:

答案 0 :(得分:5)

该代码不可靠,因为不能保证在present行之后立即加载第二个控制器中的视图。
直到视图可用,所有插座都为nil

ABCViewController中声明临时属性,并在viewDidLoad中填充文本字段

class ABCViewController : UIViewController {

    @IBOutlet weak var username: UITextField!
    @IBOutlet weak var password: UITextField!

    var tempName = ""
    var tempPassword = "" 

    // .....

    func viewDidLoad() {
        super.viewDidLoad()
        username.text = self.tempName 
        password.text = self.tempPassword
    }
}

registerButtonPressed中,将值分配给临时属性,并向控制器显示其他内容。

@IBAction func registerButtonPressed(_ sender: Any) {
    let next = self.storyboard?.instantiateViewController(withIdentifier: "ABC") as! ABCViewController
    next.tempName = self.emailTextField.text!
    next.tempPassword = self.passwordTextField.text!
    self.present(next, animated: true,completion: nil)
}