Инициализатор Swift для условного связывания должен иметь необязательный тип, а не ошибку Bool с оператором if let - PullRequest
0 голосов
/ 24 февраля 2019

Итак, я кодирую приложение в Xcode, и это часть кода:

func Signup(_ sender: Any) {
        if let email = Email.text != nil, let password = 

Во 2-й строке я получаю сообщение об ошибке

Инициализатор для условного связываниядолжен иметь опциональный тип, а не 'Bool'

Можете ли вы помочь мне, пожалуйста?

1 Ответ

0 голосов
/ 24 февраля 2019

Очевидно, вы должны устранить это != nil.

Я бы также порекомендовал:

  • обрезать пробел, чтобы кто-то не вводил пробел, чтобы пройти проверку;
  • использовать isEmpty обрезанной строкичтобы убедиться, что там что-то есть,
  • начать свойства и имена методов строчными буквами;
  • Я лично даю своим UITextField свойствам суффикс TextField (чтобы я мог различить emailTextFieldтекстовое поле из строки email.

Таким образом, возможно, что-то вроде:

@IBAction func didTapSignup(_ sender: Any) {
    guard let email = emailTextField.text?.trimmingCharacters(in: .whitespaces),
        !email.isEmpty,
        let password = passwordTextField.text?.trimmingCharacters(in: .whitespaces),
        !password.isEmpty else {
            // tell the user that validation failed here ...

            // ... and then return
            return
    }

    // do something with `email` and `password`
}

Вы можете проверить, например, что адрес электронной почты и парольпройти некоторые элементарные правила:

let emailRegexString = "^[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$"  // oversimplified email regex

func isAcceptable(email: String, password: String) -> Bool {
    let isEmailAcceptable = email.range(of: emailRegexString, options: .regularExpression) != nil
    let isPasswordAcceptable = password.count > 4

    return isEmailAcceptable && isPasswordAcceptable
}

И затем

@IBAction func didTapSignup(_ sender: Any) {
    guard let email = emailTextField.text?.trimmingCharacters(in: .whitespaces),
        let password = passwordTextField.text?.trimmingCharacters(in: .whitespaces),
        isAcceptable(email: email, password: password) else {
            // tell the user that validation failed here ...

            // ... and then return
            return
    }

    // do something with `email` and `password`
}

Обратите внимание, что регулярное выражение является чрезвычайно чрезмерно упрощенной проверкой электронной почты . Но вы можете сходите с ума по регулярному выражению , если вы действительно хотите.


Я бы также, как минимум, настроил текстовые поля моей электронной почты и пароля таким образом, чтобы пробелы не допускались. Итак, укажитеdelegate для текстовых полей электронной почты и пароля, а затем запрещающие пробелы:

extension ViewController: UITextFieldDelegate {

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        return string.rangeOfCharacter(from: .whitespacesAndNewlines) == nil
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...