Создание собственного набора символов вызывает сбой

Я использую этот кусок кода, чтобы ограничить пользовательский ввод с клавиатуры.

 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 чтобы иметь возможность использовать это расширение в вашем примере.

Другие вопросы по тегам