Использование разделителей символов для поиска и выделения текста в Swift

Ранее я разработал приложение для Android, которое послужило справочным руководством для пользователей. Он использовал базу данных sqlite для хранения информации. В базе данных хранится текст в формате UTF-8 без форматирования (то есть жирным шрифтом или подчеркнутым)

Чтобы подчеркнуть, какие разделы текста требуют форматирования, я приложил их с помощью токенов-разделителей, в частности, $, поскольку в базе данных это не отображается как информация. Перед отображением текста пользователю я написал метод, чтобы найти эти разделители и добавить форматирование к тексту, содержащемуся в них, и удалить разделители. так что $ foo $ сталоFoo.

Мой код Java для этого выглядит следующим образом:

private static CharSequence boldUnderlineText(CharSequence text, String token) {
    int tokenLen = token.length();
    int start = text.toString().indexOf(token) + tokenLen;
    int end = text.toString().indexOf(token, start);

    while (start > -1 && end > -1)
    {
        SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(text);
        //add the formatting required
        spannableStringBuilder.setSpan(new UnderlineSpan(), start, end, 0);
        spannableStringBuilder.setSpan(new StyleSpan(Typeface.BOLD), start, end, 0);

        // Delete the tokens before and after the span
        spannableStringBuilder.delete(end, end + tokenLen);
        spannableStringBuilder.delete(start - tokenLen, start);
        text = spannableStringBuilder;

        start = text.toString().indexOf(token, end - tokenLen - tokenLen) + tokenLen;
        end = text.toString().indexOf(token, start);
    }

    return text;
}

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

До сих пор я пытался использовать оба типа NSString и String для моего исходного неформатированного абзаца, и мне удалось получить диапазон, начальный и конечный индексы первого разделителя:

func applyFormatting2(noFormatString: NSString, delimiter: String){
    let paragraphLength: Int = noFormatString.length //length of paragraph
    let tokenLength: Int = delimiter.characters.count //length of token

    let rangeOfToken = noFormatString.rangeOfString(formatToken) //range of the first delimiter
    let startOfToken = rangeOfToken.toRange()?.startIndex //start index of first delimiter
    let endOfToken = rangeOfToken.toRange()?.endIndex //end index of first delimiter

    var startOfFormatting = endOfToken //where to start the edit (end index of first delimiter)



}

ИЛИ ЖЕ

func applyFormatting(noFormatString: String, token: String){
    let paragraphLength: Int = noFormatString.characters.count
    let tokenLength: Int = token.characters.count   //length of the $ Token (2)
    let rangeOfToken = noFormatString.rangeOfString(formatToken)    //The range of the first instance of $ in the no format string
    let startOfToken = rangeOfToken?.startIndex //the starting index of the found range for the found instance of $
    let endOfToken = rangeOfToken?.endIndex //the starting index of the found range for the found instance of $


    var startOfFormatting = endOfToken
}

Я ценю, что этот код является многословным и имеет бессмысленные переменные, но он помогает мне продумывать мой код, когда я решаю проблему.

В настоящее время я изо всех сил пытаюсь найти второй / закрывающий разделитель. Я хочу искать по строке из определенного индекса, как я делал в Java, используя строку

int end = text.toString().indexOf(token, start);

Однако я не могу понять, как это сделать, используя диапазоны.

Может кто-нибудь помочь мне с тем, как правильно определить, где находится закрывающий разделитель, или как заполнить блок кода для форматирования всего необходимого текста?

Спасибо

Aldo

Ответы на вопрос(2)

Ваш ответ на вопрос