Rainbow
为 Swift 在控制台和命令行输出中添加文字颜色、背景颜色和样式。它专为跨平台软件终端记录而设计,可在 Apple 的平台和 Linux 上运行。
基本用法
使用 String
扩展的便捷方式,然后打印彩色字符串。
命名颜色和样式
import Rainbow
print("Red text".red)
print("Blue background".onBlue)
print("Light green text on white background".lightGreen.onWhite)
print("Underline".underline)
print("Cyan with bold and blinking".cyan.bold.blink)
print("Plain text".red.onYellow.bold.clearColor.clearBackgroundColor.clearStyles)
它提供了如下内容
安装
Swift Package Manager
如果您正在用 Swift 开发跨平台软件,Swift 包管理器可能是您的首选。只需将此仓库的 URL 添加到您的 Package.swift
文件中作为依赖项。
import PackageDescription
let package = Package(
name: "YourAwesomeSoftware",
dependencies: [
.package(url: "https://github.com/onevcat/Rainbow", .upToNextMajor(from: "4.0.0"))
],
targets: [
.target(
name: "MyApp",
dependencies: ["Rainbow"]
)
]
)
准备好后,运行 swift build
。
您可以在 Apple 的官方页面上了解更多关于如何使用 Swift 包管理器的信息。
其他用法
字符串插值和嵌套
Swift 支持字符串插值。可以为字符串的一部分定义颜色。或者甚至创建嵌套彩色字符串。内部的颜色样式将被保留
print("接天莲叶\("无穷碧".green),映日荷花\("别样红".red)")
print("\("两只黄鹂".yellow)鸣翠柳,一行白鹭\("上青天".lightBlue)。".lightGreen.underline)
ANSI 256-Color Mode
8-bit 颜色完全支持,包括文本颜色和背景颜色
print("停车坐爱\("枫林晚".bit8(31)),\("霜叶".bit8(160))红于\("二月花".bit8(198))。")
print("\("一道残阳".bit8(202))铺水中,\("半江瑟瑟".bit8(30).onBit8(226))半江红。")
十六进制颜色(近似)
它也接受十六进制颜色。彩虹尝试将其转换为最接近的.bit8
颜色
print("黑云压城\("城欲摧".hex("#666")),甲光向日\("金鳞开".hex("000000").onHex("#E6B422"))。")
print("日出江花\("红胜火".hex(0xd11a2d)),春来江水\("绿如蓝".hex(0x10aec2))")
有效格式:
"FFF"
,"#FFF"
,"FFFFFF"
,"#FFFFFF"
,0xFFFFFF
真彩色
一些终端模拟器支持24位真彩色。如果您确定用户的终端可以显示24位颜色,彩虹没有理由拒绝它们!
print("疏影横斜\("水清浅".bit24(36,116,181)),暗香浮动\("月黄昏".bit24(254,215,26))")
print("\("春色满园".hex("#ea517f", to: .bit24))关不住,\("一枝红杏".hex("#f43e06", to: .bit24))出墙来。")
输出目标
默认情况下,Rainbow 应该足够智能以检测输出目标,以确定是否是 tty。例如,如果写入文件,则它将自动输出纯文本
// main.swift
print("Hello Rainbow".red)
$ .build/debug/RainbowDemo > output.txt
// output.txt
Hello Rainbow
这有助于共享用于向控制台和日志文件记录的相同代码。
您可以通过以下方式手动更改此行为:
- 自己设置
Rainbow.outputTarget
。 - 在执行您的应用程序时传递一个
"NO_COLOR"
环境值。 - 或者将
Rainbow.enabled
设置为false
。
详细方式
如果您想使用更详细的方式,也可以
import Rainbow
let output = "The quick brown fox jumps over the lazy dog"
.applyingCodes(Color.red, BackgroundColor.yellow, Style.bold)
print(output) // Red text on yellow, bold of course :)
甚至从头开始构建一切
let entry = Rainbow.Entry(
segments: [
.init(text: "Hello ", color: .named(.magenta)),
.init(text: "Rainbow", color: .bit8(214), backgroundColor: .named(.lightBlue), styles: [.underline]),
]
)
print(Rainbow.generateString(for: entry))
请记住,字符串扩展(如 "Hello".red
)是 O(n)
。因此,如果您正在处理大型字符串或非常复杂的嵌套,可能会出现性能问题或者使流变得困难。手工方式在这些情况下是一个及时的救援。
动力和兼容性
感谢 Swift 的开源,开发者现在可以用相同的语言编写跨平台程序。我相信命令行软件将是下一个伟大的 Swift 平台。丰富多彩、井然有序的输出总能帮助我们理解发生了什么。这确实是创建出色软件的必要实用工具。
Rainbow
应该在 macOS 和 Linux 终端中都能很好地运行。它足够智能,可以检查输出是否连接到有效的文本终端,以决定是否应该修改日志。这当您想要将日志发送到文件而不是控制台时可能很有用。
联系我们
在 Twitter 或 新浪微博 上关注我并联系我。如果您发现了一个问题,只需在 它上面打开一个工单 即可。我们也热切欢迎提交拉取请求。
赞助商 & 支持
开源项目没有您的帮助无法长久生存。如果您觉得 Kingfisher 很有用,请考虑通过成为赞助商来支持该项目。您的用户图标或公司徽标会出现在我的博客上,并附有链接到您的首页。
通过 GitHub Sponsors 成为赞助商。
许可证
Rainbow 是在 MIT 许可证下发布的。有关详细信息,请参阅 LICENSE 文件。