TextOutputStream
和 TextOutputStreamable
就是标准库内置的一个标准输出流协议
。
大概意思就是对你的print方法做一些加工
。
下面是标准库中对 TextOutputStream 协议的解释和说明,使用场景就是对我们打印的内容做一些转化 举例中的ASCIILogger()
系统库中并不存在,只是做说明写的一个。
/// The `ASCIILogger` type's `write(_:)` method processes its string input by
/// escaping each Unicode scalar, with the exception of `"\n"` line returns.
/// By sending the output of the `print(_:to:)` function to an instance of
/// `ASCIILogger`, you invoke its `write(_:)` method.
///
/// let s = "Hearts ♡ and Diamonds ♢"
/// print(s)
/// // Prints "Hearts ♡ and Diamonds ♢"
///
/// var asciiLogger = ASCIILogger()
/// print(s, to: &asciiLogger)
/// // Prints "Hearts \u{2661} and Diamonds \u{2662}"
public protocol TextOutputStream {
/// Appends the given string to the stream.
mutating func write(_ string: String)
}
实现TextOutputStream协议只需要实现其write
方法。 调用print(“”, to: &打印转换的实例对象)
这个方法即可。
ASCIILogger
结构体的具体实现
struct ASCIILogger: TextOutputStream {
mutating func write(_ string: String) {
let ascii = string.unicodeScalars.lazy.map { scalar in
scalar == "\n"
? "\n"
: scalar.escaped(asASCII: true)
}
print(ascii.joined(separator: ""), terminator: "")
}
}
swift官方文档对TextOutputStream有很详细的说明,感兴趣的同学可以看看😄