替换打印出来的文本

Replace printed out text

我创建了一个执行一些长操作的命令行工具,我想通过打印语句通知用户,例如:

"10% Done"
"20% Done"

操作完成的百分比。如果我使用 println,每个进度都会被打印到一个新行中(很明显),但是 swift 中有没有一种方法可以用新的文本替换最后打印的文本,因此您可以在控制台上阅读只有实际百分比,而不是实际和之前打印的百分比?

不,这不可能。 Swift 无法访问已经打印出来的字符串。但是您可以创建一个进度条来显示进度。例如像这样:

|=========               | 40%

但是你无法更改日志的输出,在你打印出来之后。

如果输出到 Terminal 那么你可以使用这样的事实 \r(回车Return)将“光标”移动到当前行的开头 行,不前进到下一行:

print("10% done ", terminator: "\r")
print("20% done ", terminator: "\r")
print("100% done")

(但请注意,这在 Xcode 调试器控制台中不起作用。)

类似这样的东西在终端控制台上有效:

import Foundation
for i in 1...10 {
    print("\(i) \r", terminator: "")
    fflush(stdout)
    sleep(1)
}