$ grep -r Tag: «swiftui»

-rw-r--r-- 6.5K 6 апр. 2026 · B473A60 · ~2 мин

HTMLEditor для SwiftUI 1.1.0

swiftui html macos open source

HTMLEditor для SwiftUI 1.1.0

Этот релиз посвящен обеспечению совместимости с Swift 6.3, существенному переписыванию обработки подсветки синтаксиса и значительному улучшению отзывчивости при редактировании очень больших HTML-документов.

Добавлено

  • Добавлен исполняемый таргет HTMLEditorBenchmarks для проведения повторяемых замеров производительности.
  • Добавлена поддержка бенчмарков для: полного планирования подсветки, повторного использования перекрытий (overlap reuse), инвалидации правок, переназначения видимой подсветки и путей локальной перерисовки больших документов.
  • Добавлены специализированные регрессионные тесты для:
    • повторного использования кэша планировщика и инвалидации в рамках документа;
    • крайних случаев с некорректными NSRange и кодировкой UTF-16;
    • подсветки значений атрибутов в кавычках и без них;
    • переназначения состояния видимой подсветки;
    • покрытия подсветки на уровне блоков;
    • политик редактирования и прокрутки больших документов.

Изменено

  • Runtime редактора была отрефакторена на более мелкие специализированные компоненты, включая отдельные файлы для жизненного цикла координатора, вьюпорта, редактирования, политик, покрытия, структурных диапазонов и состояния видимой подсветки.
  • Синтаксический анализатор был разбит на компоненты на базе планировщика и исполнителя для более четкого разделения этапов сканирования, планирования и применения подсветки.
  • Редактор переведен на адаптивную модель выполнения, которая меняет свое поведение в зависимости от размера документа, вместо того чтобы обрабатывать все HTML-документы одинаково.

Улучшено

  • Значительно улучшена производительность при редактировании больших документов благодаря:
    • приоритетной подсветке видимой области;
    • кэшированию планировщика в пределах документа и целевой инвалидации;
    • кэшированию планов видимых диапазонов;
    • отслеживанию покрытия подсветки на уровне блоков;
    • выравниванию структурных «грязных» диапазонов вокруг правок;
    • двухфазному редактированию больших файлов с немедленным микро-проходом и отложенной расширенной перерисовкой;
    • объединению частых правок для снижения частоты перерисовок;
    • семантической подсветке во время простоя прокрутки;
    • отложенной синхронизации привязок для больших документов;
    • автоматическому включению режима allowsNonContiguousLayout в режиме работы с большими файлами.
  • Повышена стабильность подсветки при наборе текста в середине очень большого HTML-документа за счет сохранения состояния видимого оверлея и уменьшения частоты перерисовок вокруг курсора.
  • Улучшена настройка производительности для больших файлов с помощью выделенных бенчмарков и runtime-зондов.

Исправлено

  • Исправлены проблемы компиляции и конкурентности, необходимые для совместимости с Swift 6.3.
  • Исправлено несколько проблем в путях обновления редактора, связанных с состоянием координатора, задачами подсветки и поведением main-actor.
  • Исправлены регрессии подсветки и крайние случаи, связанные с:
    • частичными тегами;
    • пустым вводом;
    • большими объемами данных;
    • раскраской значений атрибутов;
    • потерей видимой подсветки при редактировании больших файлов;
    • некорректными или обрезанными видимыми диапазонами.

Примечания

  • Для небольших HTML-документов по-прежнему используется семантическая подсветка всего документа.
  • Очень большие HTML-файлы теперь автоматически переключаются в более консервативный, ориентированный на производительность режим редактирования, чтобы обеспечить плавность прокрутки и набора текста.

Попробуйте на GitHub: https://github.com/makoni/HTMLEditor-SwiftUI

Star Fork

[↵] открыть пост html-editor-for-swiftui-1-1-0.md
-rw-r--r-- 645B 11 авг. 2025 · CA8478D · ~1 мин

HTMLEditor для SwiftUI 1.0.3

swiftui html macos open source

Текстовый редатор SwiftUI для macOS с подсветкой синтаксиса HTML

Потратил еще немного времени на HTMLEditor для SwiftUI. В новой версии 1.0.3 внесены значительные улучшения производительности (спасибо Claude Code).

Попробуйте его на GitHub: https://github.com/makoni/HTMLEditor-SwiftUI

[↵] открыть пост htmleditor-for-swiftui-1-0-3.md
-rw-r--r-- 1.4K 9 июля 2025 · EDE172F · ~1 мин

HTML редактор на SwiftUI для macOS с подсветкой HTML синтаксиса

swiftui html macos open source

Текстовый редактор SwiftUI для macOS с подсветкой синтаксиса HTML

Несколько месяцев назад я захотел добавить в одно из своих приложений текстовый редактор с подсветкой синтаксиса HTML. Я попробовал пару библиотек, найденных на GitHub, но ни одна из них мне не подошла. В основном они слишком тяжеловесные и пытаются уместить в себе всё сразу. И в конечном итоге они работают нестабильно и с багами.

Вдохновившись концепцией «vibe coding», я сделал свой собственный вариант. Он отлично работает и не пытается быть полноценной IDE или серьезным редактором кода. Это просто простой SwiftUI компонент с текстовым редактором и подсветкой синтаксиса. Цвета можно настроить с помощью простой структуры.

Проект на GitHub: https://github.com/makoni/HTMLEditor-SwiftUI

[↵] открыть пост swiftui-text-editor-for-macos-with-html-syntax-highlighting.md
-rw-r--r-- 2.8K 30 марта 2024 · E0344BE · ~2 мин

Как получить выделенный текст внутри TextEditor в SwiftUI на macOS

swiftui macos

Как получить выделенный текст внутри TextEditor в SwiftUI на macOS

TextEditor в SwiftUI все еще не имеет API для получения выделения пользователя. Но так как внутри используется NSTextView, мы можем подписаться на его уведомления.

Вот пример того, как получить подстроку из пользовательского выделения:

[↵] открыть пост how-to-get-selected-text-inside-of-texteditor-in-swiftui-on-macos.md
-rw-r--r-- 1.9K 29 марта 2020 · C1C7EDD · ~1 мин

Оборачиваем модели в SwiftUI для соответствия Identifiable

swiftui swift шпаргалки

Чтобы использовать массив моделей во вью List в SwiftUI, эти модели должны соответствовать протоколу Identifiable.

Вот пример модели:

struct MyDataModel {
    let title: String
    let message: String
} 

А вот пример вью SwiftUI, в котором хотим показать список:

struct TestView: View {
    var dataArray: [MyDataModel]
    var body: some View {
        List(dataArray) { data in
            VStack {
                Text(data.title)
                Text(data.message)
            }
        }
    }
} 

Если использовать MyDataModel внутри List, Xcode выдаст ошибку:

Ошибка соответствия Identifiable в Xcode

Иногда модель просто так не поменять. Например, она может быть из стороннего SDK, который вы используете в приложении. Но можно написать обёртку для этой структуры, которая соответствует протоколу Identifiable:

struct MyDataModelWrapper: Identifiable {
    var id = UUID()
    var data: MyDataModel
}

let testDataModel = MyDataModel(
    title: "Title 1",
    message: "I wanna be used inside of a List"
)

let wrappedData = MyDataModelWrapper(data: testDataModel)

Тогда вью будет выглядеть так:

struct TestView: View {
    var dataArray: [MyDataModelWrapper] 

    some View {
        List(dataArray) { wrappedData in
            VStack {
                Text(wrappedData.data.title)
                Text(wrappedData.data.message)
            }
        }
    }
}

Готово.

[↵] открыть пост wrapping-models-in-swiftui-for-identifiable-conformance.md
makoni@arm1:~/blog$ cd .. // ↵ ко всем постам