Подтвердить отправку формы | Кодементор
Я уверен, что вы когда-либо применяли форму входа, регистрации хотя бы раз в жизни. Что ты сделал?
Ниже приведены некоторые основные шаги для потока регистрации:
- Подтвердить электронную почту: пусто, недействительно
- Подтвердить пароль: пустой, слишком короткий пароль, в некоторых ситуациях необходимо проверить, что он содержит хотя бы 1 символ верхнего регистра или другие условия.
- Представить форму
Я делал это много раз и обнаружил, что проверка в контроллере — не лучший способ. Я нашел лучший способ сделать это. Поделиться сегодня.
Это определенно не лучшая практика для проверки отправки формы, но намного лучше, чем метод, о котором я говорил выше. Посмотрим, как это работает
Загрузите стартовый проект на Валидатор формы.
Очень простой пользовательский интерфейс с электронной почтой, паролем, номером телефона.
Создать новый файл RegisterValidator.swift
и введите код ниже.
extension RegisterController {
struct Validator { }
}
Мы создаем Validator
структура внутри RegisterController
. Мы также можем сделать это для LoginController
. Это не конфликт вместе. Одно и то же имя в другом пространстве имен.
1. Определите свои свойства
struct Validator {
var email: String?
var password: String?
var phone: String?
mutating func setValue(email: String?, password: String?, phone: String?) {
self.email = email
self.password = password
self.phone = phone
}
}
Вы можете добавить больше свойств, таких как ваше требование, иногда нужно иметь имя, фамилию или адрес.
2. Подтвердите свои свойства
func check() -> ValidatorResult {
guard let email = email else {
return ValidatorResult(isValid: false, message: "Email can't be empty")
}
if email.isEmpty == true {
return ValidatorResult(isValid: false, message: "Email can't be empty")
}
if email.isValidEmail() == false {
return ValidatorResult(isValid: false, message: "Invalid email")
}
guard let password = password else {
return ValidatorResult(isValid: false, message: "Password can't be empty")
}
if password.isEmpty == true {
return ValidatorResult(isValid: false, message: "Password can't be empty")
}
if password.count < 6 {
return ValidatorResult(isValid: false, message: "Password must have at least 6 characters")
}
guard let phone = phone else {
return ValidatorResult(isValid: false, message: "Phone can't be empty")
}
if phone.isEmpty == true {
return ValidatorResult(isValid: false, message: "Phone can't be empty")
}
return ValidatorResult(isValid: true, message: nil)
}
Мы проверяем каждый фактор каждого свойства и возвращаем пользователю правильную ошибку. Например, вы можете сообщить пользователю об ошибке с пустой электронной почтой или о неверной длине электронной почты или пароля.
Достаточно ясно? Я думаю да. Здесь вы можете проверить каждое требование, легко добавлять или удалять условия таким образом.
3. Результат проверки
Нам нужно что-то вернуть пользователям, вы можете добавить больше удобства в ValidatorResult
. Я использую только основное.
struct ValidatorResult {
var isValid = true
var message: String?
}
4. Настройка контроллера
@IBAction func registerAccount(_ sender: Any) {
validator.setValue(email: emailTextField.text,
password: passwordTextField.text,
phone: phoneTextField.text)
let result = validator.check()
if result.isValid == false, let message = result.message {
showMessage(message: message)
return
}
callRegisterApi(email: validator.email!,
password: validator.password!,
phone: validator.phone!)
}
func showMessage(message: String) {
let controller = UIAlertController(title: "", message: message, preferredStyle: .alert)
controller.addAction(UIAlertAction(title: "OK", style: .default))
present(controller, animated: true)
return
}
Мы можем поставить exclamation point - !
в validator.email
, validator.password
здесь, потому что они не нулевые, конечно.
Гораздо лучше, когда мы проверяем результат switch...case
. Ваш код чище и хорош для сложных проектов. (Спасибо Бишалу Гимире за предложение).
5. Запустите и посмотрите
Нам нужно расширение для проверки правильности электронной почты.
extension String {
func isValidEmail() -> Bool {
let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
return emailTest.evaluate(with: self)
}
}
Готов к запуску.
Вы можете скачать готовый проект здесь.
Как вы думаете, что мы можем сделать здесь лучше? Лучше сосредоточиться на текстовом поле ошибки? Или изменить цвет фона текстового поля ошибки? Или встряхнуть?
Да, будет намного лучше. Добавьте немного кода и сделайте это.
Этот пост сейчас слишком длинный. Вы можете проверить ветку improvement
чтобы увидеть, как его улучшить. Скачать на улучшение.
Самое удобное в этом способе то, что вы можете повторно использовать Validator
везде, где вы хотите, немного измените свойства и условия. Надеюсь, это поможет вам в кодировании.
Есть много способов сделать валидацию. Пожалуйста, поделитесь со всеми, что вы делаете ниже. Делитесь, чтобы расти.
Наслаждайтесь кодированием.