如何使用Swift在stderr上打印?

Max*_*amy 5 linux swift swift2

我在Linux上使用Swift 2.2,我需要在标准错误流上编写一些调试输出.

目前,我正在做以下事情:

import Foundation

public struct StderrOutputStream: OutputStreamType {
    public mutating func write(string: String) { fputs(string, stderr) }
}
public var errStream = StderrOutputStream()

debugPrint("Debug messages...", toStream: &errStream)
Run Code Online (Sandbox Code Playgroud)

但是,我已将Swift升级到2.2.1,但似乎Foundation已不再可用.

如何使用Swift 2.2.1在标准错误流上编写(并且仍然可以在下一次升级时使用)?

Mar*_*n R 8

来自https://swift.org/blog/swift-linux-port/:

Glibc模块:大多数Linux C标准库都可通过此模块获得,类似于Apple平台上的Darwin模块.

所以这适用于所有Swift平台:

#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)
Run Code Online (Sandbox Code Playgroud)

Swift 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...
Run Code Online (Sandbox Code Playgroud)