-2

将 String 转换为 Int 类型并在控制台中打印该 Int 类型时显示错误

在展开可选值时意外发现 nil

ViewController.swift

    @IBAction func btnVerifyOTP(_ sender: Any)
    {
          let verifyOTP = 
          self.storyboard?.instantiateViewController(withIdentifier: "VerifyOTP") as! VerifyOTP
          self.navigationController?.pushViewController(verifyOTP, animated: true)
          verifyOTP.strPhone = self.tfMobile.text!
    }

ViewController2.swift

class VerifyOTP: UIViewController {

var strPhone = String()

override func viewDidLoad() {
        super.viewDidLoad()

       let numPhone = Int(strPhone)!
       print(numPhone)
    }
}

错误:此方法将打印“在展开可选值时意外发现 nil”

4

1 回答 1

0

您的问题之一在于初始化顺序:发生的情况是viewDidLoad在执行之前verifyOTP.strPhone = self.tfMobile.text!执行(因为pushViewController)。

这意味着 thatstrPhone是一个空字符串,并Int(strPhone)返回nil,因此强制展开将崩溃。

您可能希望更改执行顺序btnVerifyOTP

@IBAction func btnVerifyOTP(_ sender: Any)
{
    let verifyOTP = 
    self.storyboard?.instantiateViewController(withIdentifier: "VerifyOTP") as! VerifyOTP
    verifyOTP.strPhone = self.tfMobile.text!
    self.navigationController?.pushViewController(verifyOTP, animated: true)
}

您还应该nil检查您的viewDidLoad

if let numPhone = Int(strPhone) {
     print(numPhone)
}
于 2018-03-13T07:20:07.077 回答