Pojawia się błąd informujący, że „znaki” są niedostępne: użyj bezpośrednio ciągu .


extension LoginViewController : UITextFieldDelegate {

    func textField(_ textField: UITextField,
                   shouldChangeCharactersIn range: NSRange,
                   replacementString string: String) -> Bool {

        if let username = self.usernameField.text,
            let password = self.passwordField.text {

            if ((username.characters.count > 0) && //This is where I get the error
                (password.characters.count > 0)) { //This is where I get the error
                self.loginButton.isEnabled = true
            }
        }

        return true
    }

}

Jak mogę to naprawić?

0
GBMR 2 kwiecień 2020, 02:28

3 odpowiedzi

Najlepsza odpowiedź

Po prostu usuń .characters

extension LoginViewController : UITextFieldDelegate {

    func textField(_ textField: UITextField,
                   shouldChangeCharactersIn range: NSRange,
                   replacementString string: String) -> Bool {

        if let username = self.usernameField.text,
            let password = self.passwordField.text {

            if username.count > 0 &&
                password.count > 0 {
                self.loginButton.isEnabled = true
            }
        }

        return true
    }

}
2
AKH 1 kwiecień 2020, 23:49

W Swift nigdy nie sprawdzaj pustego ciągu lub pustego typu kolekcji za pomocą .count > 0, istnieje dedykowana metoda isEmpty.

W nawiasach Swift wokół wyrażeń if nie są potrzebne, a operator && można zastąpić przecinkiem

if !self.usernameField.text!.isEmpty, !self.passwordField.text!.isEmpty {
    self.loginButton.isEnabled = true
}

Właściwość text funkcji UITextField nigdy nie jest nil, więc wymuszone rozpakowanie jest w porządku.

2
vadian 2 kwiecień 2020, 08:29

Nie musisz podawać znaków, aby policzyć, ponieważ będzie to już policzone, gdy wpiszesz nazwę użytkownika.count lub password.count

If ((username.count> 0) && (password.count> 0)) {

2
galvatron 2 kwiecień 2020, 08:24