一个 Swift 包,用于将 SF Symbols 以枚举的形式提供,而不是直接使用字符串。
现在你可以这样写
Image(systemImage:.person)
Label("Text",systemImage:.zlRectangleRoundedtopFill)
或者查看所有可用符号的列表
struct SwiftUIView: View {
var body: some View {
VStack {
List(SFSymbol.allCases,id:\.name) { symbol in
Label(symbol.name,systemImage:symbol)
}
}
}
}
import SFSymbolEnum
使用 systemImage 参数的函数可以像以前一样使用,但使用点符号。符号名称通过将点符号替换为驼峰式大小写,并用数字作为前缀来将起始数字转换为枚举。
示例
Image(systemName:"arrow.down.left.circle.fill")
Image(systemName:"0.circle")
Image(systemName:"arrow.2.circlepath.circle")
变成
Image(systemName:.arrowDownLeftCircleFill)
Image(systemName:.number0Circle)
Image(systemName:.arrow2CirclepathCircle)
代码本身是使用 SF Symbols 应用程序中的 name_availablity.plist 创建的,如下所示
public enum SFSymbol:String // this enum will be generated
{
@available(iOS 13.0,macOS 10.15,tvOS 13.0,watchOS 6.0,*) case number0Circle = "0.circle"
@available(iOS 13.0,macOS 10.15,tvOS 13.0,watchOS 6.0,*) case number0CircleFill = "0.circle.fill"
...
}
extension SFSymbol:CaseIterable
{
public static var allCases:[SFSymbol] {
var allCases:[SFSymbol] = []
if #available(iOS 13.0,macOS 10.15,tvOS 13.0,watchOS 6.0,*){ allCases.append(SFSymbol.number0Circle) }
if #available(iOS 13.0,macOS 10.15,tvOS 13.0,watchOS 6.0,*){ allCases.append(SFSymbol.number0CircleFill) }
...
return allCases
}
}