SwiftyTextTable

一个轻量级的 Swift 库,用于生成文本表格。

Build Status codecov.io Carthage compatible Swift Package Manager compatible CocoaPods Platform OS X + Linux Language Swift 4.0

Example

Swift 语言支持

SwiftyTextTable 现在兼容 Swift 4.0!最后一个支持 Swift 3.1 的版本是 0.7.1。最后一个支持 Swift 2.3 的版本是 0.3.1

安装

Carthage (OS X)

您可以使用 Carthage 来安装 SwiftyTextTable,方法是将其添加到您的 Cartfile

github "scottrhoyt/SwiftyTextTable"

Swift Package Manager (OS X + Linux)

您可以使用 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 (OS X)

您可以使用 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

从具有 TextTableRepresentable 的对象数组创建表格

假设您有一个如下所示的对象数组

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            |
+-------------+---------+----------------+
*/

边框自定义

您还可以通过为 columnFencerowFencecornerFence 使用不同的值来自定义 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 参考

查看完整的 API 参考 此处

许可证

SwiftyTextTable 在 MIT 许可证下发布。