Python, безопасно, песочница [дубликат]

Порт Swift 4.2 с лучшим ответом здесь @ almas-adlibek

Набор переменных конфигурации:

private let kMaxTextLength = 8
private let kZeroDotted = "0."
private let kZero = "0"
private let kDoubleDot = ".."
private let kDot = "."
private let kPeriod = ","

Теперь Swift 4 преобразует часть кода.

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

    guard let oldText = textField.text, let swiftRange = Range(range, in: oldText) else {
        return true
    }

    let newText = oldText.replacingCharacters(in: swiftRange, with: string)

    var currentText =  textField.text?.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)

    // Change the "," (appears in other locale keyboards, such as russian) key ot "."
    currentText = currentText?.replacingOccurrences(of: kPeriod, with: kDot)

    // Check the statements of decimal value.
    if (newText == kDot) {
        textField.text = kZeroDotted;
        return false
    }

    if (newText.range(of: kDoubleDot) != nil) {
        textField.text = newText.replacingOccurrences(of: kDoubleDot, with: kDot);
        return false
    }

    // If second dot is typed, ignore it.
    let dots = newText.components(separatedBy: kDot)
    if(dots.count > 2) {
        textField.text = currentText;
        return false
    }

    // If first character is zero and second character is > 0, replace first with second. 05 => 5;
    if(newText.count == 2) {
        if(newText[0...0] == kZero && newText != kZeroDotted) {
            textField.text = newText[1...1]
            return false
        }
    }

    // Check the max characters typed.
    let oldLength = textField.text?.count ?? 0
    let replacementLength = string.count
    let rangeLength = range.length

    let newLength = oldLength - rangeLength + replacementLength;
    let returnKey = string.rangeOfCharacter(from: CharacterSet.newlines) != nil

    return newLength <= kMaxTextLength || returnKey;
}
17
задан maliperica 10 September 2010 в 22:08
поделиться

1 ответ

У Бретта Кэннона есть предварительный план для этого, насколько я знаю, но он не был разработан. Поэтому, если вы не хотите приложить много усилий, чтобы сделать это, в настоящее время нет общедоступного решения.

Блог Бретта находится по адресу: http://sayspy.blogspot.com/ , если вы хотите попробовать прочитать его, я не могу найти прямую ссылку на его дискуссии о новой безопасности. дизайн. Я не могу вспомнить, читал ли я в его блоге, рассказывая об этом, или он лично упомянул об этом, извините.

Раньше были некоторые ограниченные способности исполнения, но они были отброшены, потому что они просто не работали.

Это не невозможно сделать, но это не то, что Python может сделать прямо сейчас. Это то, что люди хотели бы, но это не очень высокий приоритет из того, что я видел.

1
ответ дан 30 November 2019 в 13:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: