Я следую за книгой
Программирование 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
}
}
Он работает, но я получаю предупреждение, в котором говорится, что "Код после возвращения никогда не будет выполнен", есть ли лучший способ сделать это, чтобы предотвратить это предупреждение? Заранее спасибо!
Предупреждение,
Код после возврата никогда не будет выполнен
сам сам объясняет, компилятор выполнил анализ вашего кода и сообщает вам, что любой контент ниже 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.2.3.4.5
.
В сообщении об ошибке говорится:
Код после возврата никогда не будет выполнен
Что в основном означает, что всякий раз, когда вы добавляете оператор return
код после этого оператора не будет выполнен.
Предупреждение из этой строки:
return allowedCharacters.isSuperset(of: characterSet)
Я не думаю, что вам нужен код ниже, потому что в этой функции, я уверен, вы хотите вернуть только допустимые символы, иначе верните false.
return
. Вы пытались ввести 1,5 например и посмотреть, работает ли это на самом деле?