我正在编写用于注册和注册用户视图的代码。它应在运行更多代码之前检查textfield是否为nil。
当b为nil * / return时,让a = b else {/ *代码}
我知道如果b为零,则应返回保护声明在我的编码中b为nil,但是它没有返回不确定原因。我也打印出对我来说看起来像零的内容。谢谢
这里是编码
类userLoginView:UIViewController {
let realm = try! Realm()
var email:String?
var password:String?
var userResult:Results<userInfo>?
var logedin:Bool = false
@IBOutlet weak var emailtextfile: UITextField!
@IBOutlet weak var passwordtextfile: UITextField!
@IBOutlet weak var errorMessage: UILabel!
@IBOutlet weak var fnametext: UITextField!
@IBOutlet weak var lnametext: UITextField!
@IBOutlet weak var emailsigntext: UITextField!
@IBOutlet weak var signpasstext: UITextField!
@IBOutlet weak var passagaintext: UITextField!
@IBOutlet weak var contractortext: UITextField? = nil
@IBOutlet weak var signError: UILabel!
@IBAction func loginButton(_ sender: Any) {
guard email == emailtextfile!.text,
password == passwordtextfile!.text else{
errorMessage?.text = "Please fill in your email and password"
return
}
if checkUser(_email: email ?? "", _pass: password ?? "" ){
logedin = true
if let adminView = self.storyboard?.instantiateViewController(withIdentifier: "adminView") as? adminviewController{
self.navigationController?.pushViewController(adminView, animated: true)
UserDefaults.standard.set(email, forKey: "email")
UserDefaults.standard.set(password, forKey: "password")
}
}else{
errorMessage?.text = "Email or Password doesn't match our record"
}
}
@IBAction func signupsegues(_ sender: UIButton!) {
if let signupview = storyboard?.instantiateViewController(withIdentifier: "signupView"){
navigationController?.pushViewController(signupview, animated: true)
}
}
@IBAction func signmeup(_ sender: UIButton!) {
let contractor = contractortext?.text ?? ""
guard let email = emailsigntext.text else{
signError?.text = "Please fill in email"
return}
guard let fname = fnametext.text else{
signError?.text = "Please fill in first name"
return}
guard let lname = lnametext.text else{
signError?.text = "Please fill in last name"
return}
guard let pass = signpasstext.text else{
signError?.text = "Please fill password"
return}
guard let passagain = passagaintext.text else{
signError?.text = "Please fill confirm password"
return
}
do{
print("pass:" + pass)
print("passagain" + passagain)
print("email:" + email)
print("fname:" + fname)
print("lname:" + lname)
try signupUser(_email: email, _firstname: fname, _lastName: lname, _password: pass, _comfirmpass: passagain, _contractor: contractor)
}catch{
print("some error")
}
}
@IBAction func forgotButton(_ sender: Any) {
}
override func viewDidLoad() {
super.viewDidLoad()
userResult = realm.objects(userInfo.self)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func checkUser(_email:String, _pass:String) -> Bool {
var checked:Bool = false
let userrecord = userResult?.filter("userEmail = %@", email!)
let emailrecord = userrecord?.first?.userEmail
let passrecord = userrecord?.first?.userPass
if (email == emailrecord && password == passrecord){
checked = true
}else {checked = false}
return checked
}
func signupUser(_email:String!,_firstname:String!,_lastName:String!,_password:String!,_comfirmpass:String!,_contractor:String?) throws ->Void {
if _password.elementsEqual(_comfirmpass) {
let temp = userInfo(value: [_email!,_password!,_firstname!,_lastName!,_contractor ?? "",false])
try realm.write {
realm.add(temp)
}
}else{
signError?.text = "password does not match"}
}
}
您可能使用了错误的图案。您应该使用guard let ...
测试非零值。
var email: String? // nil
guard email == emailtextfile!.text ...
将通过,如果两个字符串均为零。
要测试两个字符串都不为零,并且等于您的变量,您应该使用
guard let email = emailTextFile?.text, self.email == email, ... else {
// stuff if email is nil
return
}
// stuff to do if email has a value and is equal to the value in the textfield
...
也请注意,无需强行打开文本框。 emailTextField?.text
可以。