Ошибка NSRegularExpression, я не могу использовать регулярные выражения

Я создавал регулярное выражение, но не могу решить эту проблему

class Regex {
    let internalExpression: NSRegularExpression
    let pattern: String

    init(_ pattern: String) {
        self.pattern = pattern
        var error: NSError?
        self.internalExpression = NSRegularExpression(pattern: pattern, options: .CaseInsensitive, error: &error)
    }

    func test(input: String) -> Bool {
        let matches = self.internalExpression.matchesInString(input, options: nil, range:NSMakeRange(0, countElements(input)))
        return matches.count > 0
    }
}

Вот ошибки, которые я получил:

"Невозможно вызвать инициализатор для типа 'NSRegularExpression' со списком аргументов типа '(pattern: String, options: _, error: inout NSError?)'"

а также

"Использование неразрешенного идентификатора countElements"

Я только хочу использовать это:

if usuarioView.text! =~ "/^[a-zA-Z0-9_]{3,30}$/"

1 ответ

Решение

Есть несколько проблем с вашим кодом. Похоже, вы переходите с более ранней версии Swift на Swift 2.x.

NSRegularExpression инициализатор был изменен, чтобы выдавать ошибку вместо передачи в ErrorPointer:

do {
    self.internalExpression = try NSRegularExpression(pattern: pattern, options: .CaseInsensitive)
} catch {
    print(error)
}

Для конкретных nil для OptionType ценность, использование [], Чтобы получить длину строки, используйте input.characters.count, поскольку countElements был удален из Swift:

let matches = self.internalExpression.matchesInString(input, options: [], range:NSMakeRange(0, input.characters.count))
Другие вопросы по тегам