当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Swift TextOutputStream用法及代码示例


协议

TextOutputStream

可以作为text-streaming 操作目标的类型。

声明

protocol TextOutputStream

概述

您可以将标准库的 print(_:to:)dump(_:to:) 函数的输出发送到符合 TextOutputStream 协议的类型的实例,而不是标准输出。 Swift 的String 类型已经符合TextOutputStream,因此您可以在字符串中捕获来自print(_:to:)dump(_:to:) 的输出,而不是将其记录到标准输出中。


var s = ""
for n in 1...5 {
    print(n, terminator: "", to: &s)
}
// s == "12345"

符合TextOutputStream 协议

要使您的自定义类型符合TextOutputStream 协议,请实现所需的write(_:) 方法。使用TextOutputStream 目标的函数可以在每次写入操作时多次调用write(_:)

例如,这是一个输出流的实现,它将任何输入转换为其纯 ASCII 表示,然后将其发送到标准输出。


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: "")
    }
}

ASCIILogger 类型的 write(_:) 方法通过转义每个 Unicode 标量来处理其字符串输入,但 "\n" 行返回除外。通过将 print(_:to:) 函数的输出发送到 ASCIILogger 的实例,您可以调用其 write(_:) 方法。


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}"

可用版本

iOS 8.0+, iPadOS 8.0+, macOS 10.10+, Mac Catalyst 13.0+, tvOS 9.0+, watchOS 2.0+

相关用法


注:本文由纯净天空筛选整理自apple.com大神的英文原创作品 TextOutputStream。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。