如何使用Swift在stderr上打印?
问题描述:
我在Linux上使用Swift 2.2,我需要在标准错误流上编写一些调试输出。如何使用Swift在stderr上打印?
目前,我做了以下内容:
import Foundation
public struct StderrOutputStream: OutputStreamType {
public mutating func write(string: String) { fputs(string, stderr) }
}
public var errStream = StderrOutputStream()
debugPrint("Debug messages...", toStream: &errStream)
不过,我已经升级斯威夫特2.2.1但似乎Foundation
不再可用。
如何使用Swift 2.2.1编写标准错误流(并且在下次升级时仍然可以使用)?
答
从https://swift.org/blog/swift-linux-port/:
Glibc的模块:大多数Linux的C标准库中,可通过该模块类似于苹果平台的达尔文模块。
因此,这应该对所有雨燕平台上工作:
#if os(Linux)
import Glibc
#else
import Darwin
#endif
public struct StderrOutputStream: OutputStreamType {
public mutating func write(string: String) { fputs(string, stderr) }
}
public var errStream = StderrOutputStream()
debugPrint("Debug messages...", toStream: &errStream)
更新斯威夫特3:
public struct StderrOutputStream: TextOutputStream {
public mutating func write(_ string: String) { fputs(string, stderr) }
}
public var errStream = StderrOutputStream()
debugPrint("Debug messages...", to: &errStream) // "Debug messages..."
print("Debug messages...", to: &errStream) // Debug messages...
我没有斯威夫特在Linux上安装当前,但根据文档,'import glibc'应该导入大部分C库(比如stderr)。 –
它也可以在Mac OS上使用吗?如果它是便携式的,那就更好了。 –