Добавьте hypens к регистрационному номеру транспортного средства в swift - PullRequest
0 голосов
/ 30 января 2020

Мне нужно добавить гипс в текстовое поле, когда пользователь вводит регистрационный номер автомобиля. например, чтобы сделать это KA-01-BR-1234 в качестве пользовательских типов. Я реализовал метод ниже, но я ищу лучший способ сделать это, если есть. Любые ответы будут полезны. спасибо

KA01BR1234

Я пробовал что-то вроде этого:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        if textField.tag == 909090 {
            if textField.text!.count > 13 {
                return false
            }

            if range.length == 0 && (range.location == 2 || range.location == 5 || range.location == 8) {
                textField.text = "\(textField.text!)-\(string)"
                return false
            }

            return true
        }

        return true
    }

Это не будет работать, если пользователь вводит KA01R1234 (B отсутствует).

enter image description here

Мой второй подход такой (все еще ужасный, но в настоящее время работает):

extension String {
    ///Add Hypen for Vehicle Registration No.
    func addHypen() -> String {
        var finalStr = ""
        self.forEach { (charact) in
            if let newStr = finalStr.last, (newStr.isLetter && charact.isNumber) || (newStr.isNumber && charact.isLetter) {
                finalStr.append("-")
                finalStr.append(charact)
            } else if !charact.isWhitespace || !charact.isSymbol || !charact.isMathSymbol {
                finalStr.append(charact)
            }
        }

        return finalStr.replacingOccurrences(of: "/", with: "-")
    }
}

и затем просто вызывая функцию в строке, когда textFieldDidEndEditing:

textfield.text = textfield.text.addHypen()

Любые лучшие решения, пожалуйста, добро пожаловать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...