SymbolMacro

使用 Swift 宏进行编译时检查的 SF Symbol 名称

let package = Package(
    name: "SymbolMacro",
    platforms: [.iOS(.v13), .macOS(.v11), .tvOS(.v13), .watchOS(.v6), .macCatalyst(.v13)],
)

Example

#symbol

let symbolName = #symbol("figure.walk")
// Expands to:
let symbolName = "figure.walk"
let symbolName = #symbol("figure.eating.beans")
// Error: 1:18 invalid symbol name

#symbolImage

let symbol = #symbolImage("figure.walk")
// Expands to:
let symbol = Image("figure.walk")
let symbol = #symbolImage("figure.eating.beans")
// Expands to:
// Error: 1:14 invalid symbol name

限制

Symbol 的可用性基于编译 App 的设备的操作系统版本,而非 App 的目标部署版本。

替代方案

可以使用硬编码的枚举案例访问 SF Symbols,例如:

这些提供了符号的内联自动补全,而 SymbolMacro 则与字符串字面量一起使用,这些字符串字面量可以使用 Xcode 符号库 (⌘⇧L) 进行搜索。SymbolMacro 避免了在新符号发布时需要等待第三方库更新的需求。