Создание собственного набора символов вызывает сбой
Я использую этот кусок кода, чтобы ограничить пользовательский ввод с клавиатуры.
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let allowedCharacters = CharacterSet.init(charactersIn: ".0123456789")
let characterSet = NSCharacterSet(charactersIn: string)
return allowedCharacters.isSuperset(of: characterSet as CharacterSet)
}
но моя программа вылетает при вводе любого символа.
Обновление 2: Таким образом, 99,9% этого решения прекрасно работает, к сожалению, точка / десятичная точка не регистрируется. Не уверены, почему это происходит?
1 ответ
Похоже, что это ошибка в Swift, в системе отслеживания проблем Swift есть несколько проблем: https://bugs.swift.org/browse/SR-3311, https://bugs.swift.org/browse/SR-3667
Пока это не будет исправлено, вы можете обойти эту проблему, используя следующее расширение:
extension CharacterSet {
func isSupersetOf(other: CharacterSet) -> Bool {
return CFCharacterSetIsSupersetOfSet(self as CFCharacterSet, (other as NSCharacterSet).copy() as! CFCharacterSet)
}
}
Имейте в виду, что вам нужно изменить свой characterSet
переменная из типа NSCharacterSet
в CharacterSet
чтобы иметь возможность использовать это расширение в вашем примере.