无需转换为NSAttributedString,如何复制AttributedString属性至新字符串?
Swift 原生实现:给AttributedString追加/前置同属性文本
核心实现代码
假设原AttributedString所有字符属性一致,只需复制第一个字符的属性即可,直接用Swift原生API就能完成,无需转NSAttributedString:
let originalText: AttributedString // 已存在的带统一属性的字符串 // 1. 获取原字符串首个字符的属性容器 guard let attrContainer = originalText.attributeContainer(at: originalText.startIndex) else { // 处理原字符串为空的边界情况 let newText = AttributedString("要前置的文本") return } // 2. 创建带有原属性的新字符串 var newText = AttributedString("要前置的文本", attributes: attrContainer) // 3. 拼接原字符串(如果是追加,就先复制原字符串再append新文本) newText.append(originalText)
关键说明
- 用
attributeContainer(at:)方法可以直接获取指定位置的AttributeContainer,这正是「一键复制属性」的方式,不用逐个提取设置属性 - 如果是追加文本,逻辑反过来即可:
var newText = originalText let appendText = AttributedString("要追加的文本", attributes: attrContainer) newText.append(appendText) - 边界处理:当原字符串为空时,直接创建无属性的新字符串即可(也可以根据需求自定义默认属性)
内容的提问来源于stack exchange,提问作者Nic0S
相关产品推荐
相关产品推荐

