Запретить пользователю вводить текст

-2

Я следую за книгой

Программирование IOS: Руководство по раннему ранчо Nerd

И я в той части, где вы создаете простое приложение, которое преобразует Фаренгейт в Цельсию, и последний вызов - это запретить пользователям вводить алфавитные символы, вот моя попытка.

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

        let allowedCharacters = CharacterSet.decimalDigits
        let characterSet = CharacterSet(charactersIn: string)
        return allowedCharacters.isSuperset(of: characterSet)

        let existingTextHasDecimalSeparator = textField.text?.range(of: ".")
        let replacementTextHasDecimalSeparator = string.range(of: ".")

        if existingTextHasDecimalSeparator != nil,
            replacementTextHasDecimalSeparator != nil{
            return false
        }else{
            return true
        }

    }

Он работает, но я получаю предупреждение, в котором говорится, что "Код после возвращения никогда не будет выполнен", есть ли лучший способ сделать это, чтобы предотвратить это предупреждение? Заранее спасибо!

  • 0
    да: не ставьте код после оператора return . Вы пытались ввести 1,5 например и посмотреть, работает ли это на самом деле?
  • 0
    Это хорошо, что вы изучаете iOS по книгам. Для лучшего знания, лучше, если вы предпочитаете boc nothg от Apple doc лучше, чем это, и главное, что-то новое изменило IOS, который вы впервые получили в apple doc, а не на любом другом веб-сайте и в книге.
Показать ещё 4 комментария
Теги:
nscharacterset

2 ответа

1

Предупреждение,

Код после возврата никогда не будет выполнен

сам сам объясняет, компилятор выполнил анализ вашего кода и сообщает вам, что любой контент ниже return allowedCharacters.isSuperset(of: characterSet) никогда не будет выполнен.

Как вы сказали, что: Это работает, но я получаю предупреждение о том, что "Код после возвращения никогда не будет выполнен", есть ли лучший способ сделать это, чтобы предотвратить это предупреждение?

Ans: Чтобы удалить это предупреждение, просто удалите весь код ниже этого оператора return allowedCharacters.isSuperset(of: characterSet), предупреждение будет удалено.

Если вы ищете лучший подход, я бы порекомендовал подход ниже, был бы лучший подход, чем это, но это мне не известно.

КСТАТИ,

Чтобы реализовать функциональность, т. Е. Запретить пользователю вводить текст. Вы можете просто изменить тип клавиатуры,

textField.keyboardType = .decimalPad // this only works in iPhone not in iPad

Как меняется тип клавиатуры работает только в iPhone, но не в iPad лучше реализовать символов, разрешенных в textfield, в textfield метод делегата shouldChangeCharactersIn, как показано ниже,

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

let inverseSet = NSCharacterSet(charactersIn:".0123456789").inverted // characters you want to allow in textfield

let components = string.components(separatedBy: inverseSet)

let filtered = components.joined(separator: "")

return string == filtered

}
  • 1
    У кода в этом ответе все еще есть проблемы, потому что он все еще позволяет людям вводить строку, такую как 1.2.3.4.5 .
  • 0
    Да, @rmaddy, это проблема, все говорят, что я должен удалить часть под оператором return, но эта часть также полезна. У меня вопрос, как мне сохранить оба и удалить предупреждение.
0

В сообщении об ошибке говорится:

Код после возврата никогда не будет выполнен

Что в основном означает, что всякий раз, когда вы добавляете оператор return код после этого оператора не будет выполнен.

Предупреждение из этой строки:

return allowedCharacters.isSuperset(of: characterSet)

Я не думаю, что вам нужен код ниже, потому что в этой функции, я уверен, вы хотите вернуть только допустимые символы, иначе верните false.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню