2016-05-16 151 views
4

我在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上使用嗎?如果它是便攜式的,那就更好了。 –

回答

5

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