Передача локали в RegexBuilder

Я создаю токенизатор и хотел бы представить это как структуру, передавая локаль.

Вот суть того, что я хочу написать:

      struct Tokeniser {

    private let locale: Locale
    private let integerRegex: Regex

    init(locale: Locale) {
        self.locale: Locale
        self.integerRegex = Regex {
            Capture {
                .localizedInteger(locale: locale)
            } transform: {
                Token.number($0)
            }
        }
    }

    func parse(text: String) -> Token {
        if let match = try integerRegex.firstMatch(in: text) {
            //... other code here
        }
    }

    \\...other code here
}

Поскольку Regex является универсальным, компилятор предлагает установитьintegerRegexтип дляRegex<Any>, но это вызывает еще один набор проблем с компилятором, тип которого я не смог определить. Итак, я попытался написать что-то вроде этого (вдохновленный SwiftUI):

      var integerRegex: some Regex {
    Capture {
        .localizedInteger(locale: locale)
    } transform: {
        Token.number($0)
    }
}

Но компилятор снова предлагает мне ввести Regex.

Единственный способ передать структуру компилятору — это создать ленивые переменные, которые затем имеют побочный эффект: мне приходится помечать свои функции как изменяемые, что приводит к проблемам в дальнейшем при вызове из структур SwiftUI.

      
    lazy var integerRegex = Regex {
        Capture {
            .localizedInteger(locale: locale)
        }
    }

    mutating func parse(text: String) -> Token {
        if let match = try integerRegex.firstMatch(in: text) {

        }
    }

Как мне это закодировать?

0 ответов

Другие вопросы по тегам