Какой правильный способ подстроки строки с результатами NSRegularExpression? - PullRequest
0 голосов
/ 19 мая 2019

У меня проблема с этой функцией:

    private func regexFirstGroup(in intext: String, pattern: String) -> String? {
    do {
        let nsrange = NSRange(intext.startIndex..<intext.endIndex, in: intext)
        let regex = try NSRegularExpression(pattern: pattern, options: [NSRegularExpression.Options.dotMatchesLineSeparators])
        if let match = regex.firstMatch(in: intext, options: [], range: nsrange) {
            guard let mrange = Range(match.range(at: 1), in:intext) else {
                return nil
            }
            return intext.substring(with: mrange)
        }
    } catch {
        print("Pattern \(pattern) compiled with error: \(error)")
        return nil
    }
    return nil
}

строка с:

return intext.substring(with: mrange)

выдает устаревшее предупреждение: «substring (with :)» устарела: пожалуйстаиспользуйте строковый индекс.

и когда я переключаю его на ожидаемый путь swift5:

return intext[mrange]

, чем это приводит к ошибке: для нижнего индекса 'subscript (_ :)' требуются типы 'String.Index 'и' Int 'эквивалентны

Это странно, потому что подписка должна работать с типами String.Index, а проверка константы mrange в быстрой справке показывает:

Declaration
let mrange: Range<String.Index>

Я неиспользуя импорт Foundation atm.

1 Ответ

4 голосов
/ 19 мая 2019

Вы должны использовать индекс (_:)

return String(intext[mrange])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...