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/HighlightedTextEditorCocoaPods
在Podfile中添加:
pod 'HighlightedTextEditor'🎯 最佳实践建议
- 规则顺序很重要:先定义通用规则,再定义特定规则
- 避免过度高亮:过多的规则会影响性能
- 测试不同场景:确保在各种输入情况下的表现
- 利用预设:先使用内置预设,再根据需要自定义
💡 创意应用场景
HighlightedTextEditor不仅适用于代码编辑器,还可以用于:
- 笔记应用:实时Markdown预览
- 聊天应用:高亮@提及和链接
- 表单验证:实时验证输入格式
- 教育应用:语法学习工具
- 配置编辑器:JSON/YAML语法高亮
🔮 未来发展方向
项目持续维护中,开发者可以考虑以下扩展方向:
- 更多预设:添加JSON、YAML、SQL等语法预设
- 主题系统:支持自定义颜色主题
- 性能监控:添加性能分析工具
- 插件系统:允许第三方扩展高亮规则
结语
HighlightedTextEditor通过简洁的API设计和强大的正则表达式支持,让SwiftUI开发者能够轻松实现专业的文本高亮功能。无论是构建代码编辑器、Markdown预览器还是其他需要语法高亮的应用,这个库都能提供稳定可靠的解决方案。
通过合理利用预设规则和自定义配置,你可以在几分钟内为应用添加专业的文本编辑体验。记住性能优化的关键点,享受高效开发的乐趣吧!🚀
【免费下载链接】HighlightedTextEditorA SwiftUI view for dynamically highlighting user input项目地址: https://gitcode.com/gh_mirrors/hi/HighlightedTextEditor
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考