一个轻量级的 Swift 库,用于生成文本表格。
SwiftyTextTable 现在兼容 Swift 4.0!最后一个支持 Swift 3.1 的版本是 0.7.1。最后一个支持 Swift 2.3 的版本是 0.3.1。
您可以使用 Carthage 来安装 SwiftyTextTable,方法是将其添加到您的 Cartfile
github "scottrhoyt/SwiftyTextTable"
您可以使用 Swift 包管理器 来安装 SwiftyTextTable,方法是将正确的描述添加到您的 Package.swift
文件中
import PackageDescription
let package = Package(
name: "<YOUR_PROJECT_NAME>",
dependencies: [
.package(url: "https://github.com/scottrhoyt/SwiftyTextTable.git", from: "0.5.0")
]
)
您可以使用 CocoaPods 来安装 SwiftyTextTable,方法是将其添加到您的 Podfile
pod 'SwiftyTextTable'
只需将 Source/SwiftyTextTable
目录中的 *.swift
文件复制到您的项目中即可。
import SwiftyTextTable
// First create some columns
let foo = TextTableColumn(header: "foo")
let bar = TextTableColumn(header: "bar")
let baz = TextTableColumn(header: "baz")
// Then create a table with the columns
var table = TextTable(columns: [foo, bar, baz])
// Then add some rows
table.addRow([1, 2, 3])
table.addRow([11, 22, 33])
// Then render the table and use
let tableString = table.render()
print(tableString)
/*
+-----+-----+-----+
| foo | bar | baz |
+-----+-----+-----+
| 1 | 2 | 3 |
| 11 | 22 | 33 |
+-----+-----+-----+
*/
// Put a header on the table if you'd like
table.header = "my foo table"
print(table.render())
/*
+-----------------+
| my foo table |
+-----------------+
| foo | bar | baz |
+-----+-----+-----+
| 1 | 2 | 3 |
| 11 | 22 | 33 |
+-----+-----+-----+
*/
任何 CustomStringConvertible
都可以用作行的 values
。
假设您有一个如下所示的对象数组
enum AnimalType: String, CustomStringConvertible {
case dog = "Dog"
case cat = "Cat"
case gorilla = "Gorilla"
var description: String {
return self.rawValue
}
}
struct Pet {
let type: AnimalType
let name: String
let canHazPizza: Bool
}
let furball = Pet(type: .cat, name: "Furball", canHazPizza: false)
let bestFriend = Pet(type: .dog, name: "Best Friend", canHazPizza: true)
let scary = Pet(type: .gorilla, name: "Scary", canHazPizza: true)
let pets = [furball, bestFriend, scary]
现在您想打印一个包含您的 pets
的表格。您可以通过让 Pet
遵循 TextTableRepresentable
来完成此操作
extension Pet: TextTableRepresentable {
static var columnHeaders: [String] {
return ["Name", "Animal", "Can Haz Pizza?"]
}
var tableValues: [CustomStringConvertible] {
return [name, type, canHazPizza ? "yes" : "no"]
}
// Optional
static var tableHeader: String? {
return "My Pets"
}
}
现在您可以简单地打印 pets
的表格
print(pets.renderTextTable())
/*
+----------------------------------------+
| My Pets |
+----------------------------------------+
| Name | Animal | Can Haz Pizza? |
+-------------+---------+----------------+
| Furball | Cat | no |
| Best Friend | Dog | yes |
| Scary | Gorilla | yes |
+-------------+---------+----------------+
*/
您还可以通过为 columnFence
、rowFence
和 cornerFence
使用不同的值来自定义 TextTable.render()
的输出。
table.columnFence = ":"
table.rowFence = "."
table.cornerFence = "."
print(table.render())
/*
...................
: foo : bar : baz :
...................
: 1 : 2 : :
: 11 : 22 : 33 :
...................
*/
添加行时,当 values
少于列数时,TextTable
将自动使用空字符串填充行。TextTable
也会忽略所有超过列数的 values
。
let foo = TextTableColumn(header: "foo")
let bar = TextTableColumn(header: "bar")
let baz = TextTableColumn(header: "baz")
var table = TextTable(columns: [foo, bar, baz])
table.addRow([1, 2])
table.addRow([11, 22, 33])
table.addRow([111, 222, 333, 444])
let tableString = table.render()
print(tableString)
/*
+-----+-----+-----+
| foo | bar | baz |
+-----+-----+-----+
| 1 | 2 | |
| 11 | 22 | 33 |
| 111 | 222 | 333 |
+-----+-----+-----+
*/
SwiftyTextTable 将识别许多用于格式化输出的控制台转义序列(例如 Rainbow),并在构建表格时将其考虑在内。
查看完整的 API 参考 此处。
SwiftyTextTable 在 MIT 许可证下发布。