标记 0.1.0

Annotated 0.1.0

Jérôme Alves 维护。



Annotated 0.1.0

  • Jérôme Alves

Annotated

Version License Platform

Annotated 是一个轻量库,让您的字符串可以通过语义注解。一旦对字符串进行注解,就可以将其转换为NSAttributedString或SwiftUI的Text

它允许您在不需要考虑最终视觉样式的情况下,对 ViewModel 中的字符串进行语义注解,然后再用NSAttributedStringView 中渲染字符串。

需求

  • 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文件。