Проверка, являются ли первые 3 символа пользовательского интерфейса TextField числовыми в Swift - PullRequest
0 голосов
/ 26 января 2019

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

Вот мой оператор python if (который я хочу «перевести» на swift, как он работает):

str = "123abc"                                                                  
if str.isdigit():                               
        if str[:3]:                         
            print(str)

и вот мой быстрый код

@IBOutlet weak var input: UITextField!

@IBAction func checkBarcodeRegion(_ sender: UIButton)
    {
        let text: String = input.text!

        if text.prefix(3)
        {
           //if numeric
               //do something
        }
    }

Не могу заставить это работать. Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 26 января 2019

Три варианта:

Создайте Int из подстроки и проверьте, не является ли он ненулевым.

let isNumeric1 = Int(text.prefix(3)) != nil

Удалите все цифры из подстроки с помощью регулярного выражения и проверьте, нет ли пустыхстрока

let isNumeric2 = text.prefix(3).replacingOccurrences(of: "[0-9]", with: "", options: .regularExpression).isEmpty

Разбить подстроку на набор символов decimalDigits и проверить, равно ли число компонентов 4

let isNumeric3 = text.prefix(3).components(separatedBy: .decimalDigits).count == 4
0 голосов
/ 26 января 2019

Использование prefix - правильное направление. После этого вы можете использовать allSatisfy, чтобы проверить, все ли они цифры. Один из способов проверить наличие цифр - проверить, находится ли скаляр Юникода в наборе CharacterSet.decimalDigits.

text.unicodeScalars.prefix(3)
    .allSatisfy(CharacterSet.decimalDigits.contains)

Это проверит все цифры в Unicode, включая те, которые используют индусы и арабский язык.

Если под цифрами вы подразумеваете ASCII 0123456789, то вы можете использовать:

text.prefix(3).allSatisfy(("0"..."9").contains)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...