如何使用Swift在stderr上打印?

时间:2016-05-16 08:37:26

标签: 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)

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

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

1 个答案:

答案 0 :(得分: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)

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...