Скажем так! у вас большой текст, и вы хотите, чтобы пользователь выполнял поиск по нему, но в результатах поиска вы не хотите показывать полный текст. Вы хотите показать префикс и суффикс для искомой строки с некоторым пределом. См. Изображение ниже для иллюстрации.

Итак, первым шагом является определение диапазона пользовательского запроса в целевой строке, например, text - это пользовательский запрос на приведенной выше иллюстрации. Найти диапазон подстроки в Swift довольно просто, и для этого требуется всего одна строка кода.

let range = someString.range(of: queryString)

Следующим шагом является определение того, как далеко мы можем зайти в целевой строке, учитывая предоставленный предел до и после строки запроса. См. Изображение ниже для иллюстрации и кода.

Объяснение

Сначала нам нужно найти максимальное расстояние, которое мы можем пройти в обратном направлении от нижней границы диапазона строки запроса. Так как мы движемся в обратном направлении, мы используем знак -ve. Чтобы избежать исключения за пределами диапазона, мы просто собрали максимальное значение. Например, в этом случае наш предел составляет -13, а наша строка заканчивается на -5. Точно так же нам нужно двигаться в прямом направлении от верхней границы диапазона строки запроса. По мере продвижения вперед мы используем значение +ve. В этом случае, чтобы избежать исключения диапазона за пределами, мы просто собрали минимальное значение. Например, в этом случае наш предел равен 13, а наша строка заканчивается на 5. Используя эти значения расстояния, мы можем легко узнать начальный и конечный индексы нашей желаемой строки. После нахождения индексов мы легко можем получить подстроку.

Сахарное покрытие

В приведенном выше коде после нахождения диапазонов до и после строки я только что добавил несколько условий, которые добавят 3 точки только в случае необходимости. Вот и все;)
Если вы знаете другой, более эффективный метод для достижения того же результата, не стесняйтесь поделиться им в разделе комментариев ниже. Спасибо!