Есть ли у swift протокол для записи потока байтов?

Я не могу найти что-либо в книге Swift о io. Существует ли какой-либо общий протокол, похожий на интерфейс Java OutputStream или Go Writer для записи потока байтов? Если вы пишете класс, который возвращает поток, вам нужно написать собственный протокол или использовать протокол Objective C?

Чтобы быть ясными, я прошу использовать собственный интерфейс Swift, потому что я избегаю использования Objective C или Cocoa, но для описания ожидаемого поведения для скоростного кода Swift для Swift.

Ответ 1

Это то, о чем говорят операторы Swift, и я хотел узнать больше, поэтому я просмотрел его.

Существует протокол, который называется Streamable:

protocol Streamable {
    func writeTo<Target : OutputStream>(inout target: Target)
}

OutputStream:

protocol OutputStream {
    func write(string: String)
}

write позволяет записывать объект.

String соответствует тому, что позволяет легко записывать в и из:

var target = String()
"this is a message".writeTo(&target)
println(target)
// this is a message

Запись в файл:

var msg = "this will be written to an output file"
msg.writeToFile("output.txt", atomically: false, encoding: NSUTF8StringEncoding, error: nil)
// creates 'output.txt' in the same folder as the executable

Существует также writeToUrl.

Я предполагаю, что все эти функции построены поверх потоков Cocoa, которые имеют схожие функции:

var os = NSOutputStream(toFileAtPath: "output.txt", append: true)
os.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)

var msg = "a truly remarkable message"
var ptr:CConstPointer<UInt8> = msg.nulTerminatedUTF8

os.open()
os.write(ptr, maxLength: msg.lengthOfBytesUsingEncoding(NSUTF8StringEncoding))
os.close()