Annotated
Annotated 是一个轻量库,让您的字符串可以通过语义注解。一旦对字符串进行注解,就可以将其转换为NSAttributedString
或SwiftUI的Text
它允许您在不需要考虑最终视觉样式的情况下,对 ViewModel 中的字符串进行语义注解,然后再用NSAttributedString
在 View 中渲染字符串。
需求
- iOS 11.0
- Swift 5.1
安装
Annotated 可通过CocoaPods和SwiftPM使用
示例
首先,您需要定义您的注解。通常使用 enum
是一个不错的选择。
enum AddressAnnotations: Hashable {
case city, postalCode, highlighted
}
然后您可以使用字符串字面量创建 Annotated<AddressAnnotations>
字符串。您可以通过自定义字符串插值直接为字符串的某个部分添加注解。
var string: Annotated<AddressAnnotations> = """
1 Infinite Loop
\("Cupertino", .city), CA \(95014, .postalCode)
"""
您也可以手动添加注解。
string.addAnnotation(.highlighted, at: 0..<1)
string.addAnnotation(.highlighted, forOccurencesOf: "in", options: .caseInsensitive)
最后,您可以使用提供的工厂方法将您的字符串渲染为NSAttributedString
或SwiftUI的Text
。
let attributedString = string.makeAttributedString { annotation in
switch annotation {
case nil: return [.font: UIFont.systemFont(ofSize: 24)]
case .city: return [.font: UIFont.boldSystemFont(ofSize: 24)]
case .postalCode: return [.underlineStyle: NSNumber(value: NSUnderlineStyle.single.rawValue)]
case .highlighted: return [.foregroundColor: UIColor.systemRed]
}
}
let text = string.makeText { annotation in
switch annotation {
case nil: return { $0.font(.system(size: 24)) }
case .city: return { $0.bold() }
case .postalCode: return { $0.underline() }
case .highlighted: return { $0.foregroundColor(.red) }
}
}
作者
许可证
标注是在MIT许可证下可用的。有关更多信息,请参阅LICENSE文件。