HighlightedTextEditor核心功能揭秘:Regex规则与实时高亮的简单实现
2026/7/5 18:17:45 网站建设 项目流程

HighlightedTextEditor核心功能揭秘:Regex规则与实时高亮的简单实现

【免费下载链接】HighlightedTextEditorA SwiftUI view for dynamically highlighting user input项目地址: https://gitcode.com/gh_mirrors/hi/HighlightedTextEditor

HighlightedTextEditor是一个专为SwiftUI设计的强大文本编辑器,能够实现实时语法高亮功能。这个开源项目让开发者能够轻松地为iOS和macOS应用添加专业的代码编辑体验,通过简单的正则表达式规则配置,就能实现复杂的高亮效果。

🚀 为什么选择HighlightedTextEditor?

在开发文本编辑应用时,语法高亮是一个常见但复杂的需求。传统的实现方式需要处理大量的字符串解析和样式应用逻辑,而HighlightedTextEditor通过优雅的API设计,将这一切变得简单直观。

核心优势一览

  • 实时高亮:用户在输入时立即看到高亮效果
  • 跨平台支持:同时支持iOS 13.0+和macOS 10.15+
  • 灵活配置:通过正则表达式定义高亮规则
  • 预设模板:内置Markdown和URL高亮预设
  • 性能优化:正则表达式只需实例化一次,避免重复创建

🔧 核心架构解析

HighlightedTextEditor的核心架构基于三个主要组件:HighlightingTextEditor.swift定义了基础协议和数据结构。

1. TextFormattingRule - 样式规则

这个结构体定义了如何格式化匹配的文本。它支持三种初始化方式:

// 设置固定样式值 TextFormattingRule(key: .foregroundColor, value: UIColor.red) // 动态计算样式值 TextFormattingRule(key: .underlineStyle) { content, range in if content.count > 10 { return NSUnderlineStyle.double.rawValue } else { return NSUnderlineStyle.single.rawValue } } // 设置字体特性 TextFormattingRule(fontTraits: [.traitItalic, .traitBold])

2. HighlightRule - 高亮规则

将正则表达式模式与格式化规则关联起来:

let betweenUnderscores = try! NSRegularExpression(pattern: "_[^_]+_", options: []) let rule = HighlightRule( pattern: betweenUnderscores, formattingRules: [ TextFormattingRule(fontTraits: [.traitItalic]), TextFormattingRule(key: .foregroundColor, value: UIColor.blue) ] )

3. HighlightedTextEditor - 编辑器视图

这是主要的SwiftUI视图组件,接收文本绑定和高亮规则数组。

🎨 实时高亮效果展示

HighlightedTextEditor提供了多种预设高亮规则,让开发者能够快速实现常见的语法高亮需求。

上图展示了Markdown语法的高亮效果,可以看到标题、代码块、链接等元素都被正确高亮显示。

Markdown预设详解

Markdown.swift文件中定义了完整的Markdown高亮规则,包括:

  • 代码块:使用等宽字体显示
  • 标题:根据#的数量调整字体大小和加粗
  • 链接:添加下划线效果
  • 粗体和斜体:应用相应的字体特性
  • 列表:使用灰色显示项目符号
// 使用Markdown预设 HighlightedTextEditor(text: $text, highlightRules: .markdown)

URL预设能够自动识别并高亮文本中的网址链接,为用户提供更好的编辑体验。

⚡ 性能优化技巧

HighlightedTextEditor在设计时就考虑了性能问题,特别是在正则表达式的使用上:

正则表达式单例模式

// 正确做法:只实例化一次 let pattern = try! NSRegularExpression(pattern: "_[^_]+_", options: []) // 错误做法:每次视图重绘都重新创建 // 这会严重影响性能!

高效的模式匹配

项目中的正则表达式都经过优化,避免使用过于复杂的模式,确保在实时编辑场景下的流畅性。

🔌 扩展功能与回调

除了基本的高亮功能,HighlightedTextEditor还提供了丰富的回调接口:

HighlightedTextEditor(text: $text, highlightRules: rules) .onCommit { print("用户提交编辑") } .onEditingChanged { print("开始编辑") } .onTextChange { text in print("文本变化:", text) } .onSelectionChange { range in print("选中范围:", range) } .introspect { editor in // 访问底层UITextView或NSTextView editor.textView.backgroundColor = .systemBackground }

📱 跨平台适配

HighlightedTextEditor完美适配iOS和macOS平台,通过条件编译确保在每个平台上的最佳表现:

iOS版本使用UIKit的UITextView作为底层实现,而macOS版本使用AppKit的NSTextView。这种设计确保了每个平台都能获得原生的编辑体验。

🛠️ 自定义高亮规则实战

让我们通过一个实际例子来创建自定义的高亮规则:

场景:高亮电子邮件地址

let emailRegex = try! NSRegularExpression( pattern: "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}", options: .caseInsensitive ) let emailRule = HighlightRule( pattern: emailRegex, formattingRule: TextFormattingRule(key: .foregroundColor, value: UIColor.systemBlue) ) let rules = [emailRule] struct ContentView: View { @State private var text = "" var body: some View { HighlightedTextEditor(text: $text, highlightRules: rules) .frame(maxWidth: .infinity, maxHeight: .infinity) } }

上图展示了自定义字体特性的效果,包括粗体、斜体等样式的组合应用。

📦 安装与集成

Swift Package Manager

在Xcode中,选择File → Swift Packages → Add Package Dependency,输入仓库地址:

https://github.com/kyle-n/HighlightedTextEditor

CocoaPods

在Podfile中添加:

pod 'HighlightedTextEditor'

🎯 最佳实践建议

  1. 规则顺序很重要:先定义通用规则,再定义特定规则
  2. 避免过度高亮:过多的规则会影响性能
  3. 测试不同场景:确保在各种输入情况下的表现
  4. 利用预设:先使用内置预设,再根据需要自定义

💡 创意应用场景

HighlightedTextEditor不仅适用于代码编辑器,还可以用于:

  • 笔记应用:实时Markdown预览
  • 聊天应用:高亮@提及和链接
  • 表单验证:实时验证输入格式
  • 教育应用:语法学习工具
  • 配置编辑器:JSON/YAML语法高亮

🔮 未来发展方向

项目持续维护中,开发者可以考虑以下扩展方向:

  1. 更多预设:添加JSON、YAML、SQL等语法预设
  2. 主题系统:支持自定义颜色主题
  3. 性能监控:添加性能分析工具
  4. 插件系统:允许第三方扩展高亮规则

结语

HighlightedTextEditor通过简洁的API设计和强大的正则表达式支持,让SwiftUI开发者能够轻松实现专业的文本高亮功能。无论是构建代码编辑器、Markdown预览器还是其他需要语法高亮的应用,这个库都能提供稳定可靠的解决方案。

通过合理利用预设规则和自定义配置,你可以在几分钟内为应用添加专业的文本编辑体验。记住性能优化的关键点,享受高效开发的乐趣吧!🚀

【免费下载链接】HighlightedTextEditorA SwiftUI view for dynamically highlighting user input项目地址: https://gitcode.com/gh_mirrors/hi/HighlightedTextEditor

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询