この検証検証を処理するためのよりクリーンな方法があるのだろうか、特にブロックが3つある最後のセクションが疑問です。完全性のために、私はすべてのアラートが異なるメッセージを表示してと表示していると言っています。複数のフィールド検証を簡略化して簡略化
func fieldsAreValid() -> Bool {
let emailField = view.viewWithTag(0) as! UITextField
let passwordField = view.viewWithTag(1) as! UITextField
let verificationField = view.viewWithTag(2) as? UITextField
guard let email = emailField.text,
let password = passwordField.text else {
return false
}
let isEmail = email.isEmail
let isStrongPassword = password.isAStrongPassword
let isLoginOrValidSignup = !isASignup() || verificationField?.text == password
return isEmail && isStrongPassword && isLoginOrValidSignup
}
func validateForm() -> Bool {
let valid = fieldsAreValid()
if !valid {
// show alert
}
return valid
}
私は、これは常に動作するはずのものであるため、UITextField
sの見解をキャストするas!
を使用する方が良いと思う:
func fieldsAreValid() -> Bool {
guard let email = (view.viewWithTag(1) as? UITextField)?.text,
let password = (view.viewWithTag(2) as? UITextField)?.text else {
// show an alert
return false
}
if !email.isEmail {
// show an alert
return false
}
if !password.isAStrongPassword {
// show an alert
return false
}
if isASignUp() {
if let verification = (view.viewWithTag(3) as? UITextField)?.text {
if verification != password {
// show an alert
return false
}
} else {
// show an alert
return false
}
}
return true
}
実際には、verificationFieldはオプションで隠すことができるということを忘れてしまいました。だから、もし私がフィールドにログインしようとしていると、コードがクラッシュする原因となるnilが返されます。 –
さて、コードを修正しました。今、verificationFieldはオプションです。また、 'verificationField.text == password'を' verificationField?.text == password'に変更しなければなりませんでした。 – tonisuter
わかりました。でも、ユーザーのフィードバックはどうですか?あなたのソリューションで私は警告を表示することができないだろう。 –