如何使用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编写标准错误流(并且在下次升级时仍然可以使用)?

+0

我没有斯威夫特在Linux上安装当前,但根据文档,'import glibc'应该导入大部分C库(比如stderr)。 –

+0

它也可以在Mac OS上使用吗?如果它是便携式的,那就更好了。 –

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