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

Mic*_*l R -2 ios swift

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

注意:
这不是在几个小时前起作用的,并且我什么也没做任何更改,所以我不确定现在如何或为什么不起作用。

@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
}
Run Code Online (Sandbox Code Playgroud)

意外找到nil,同时隐式展开Optional值。

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

vad*_*ian 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
    }
}
Run Code Online (Sandbox Code Playgroud)

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)
}
Run Code Online (Sandbox Code Playgroud)