swift是否有写入字节流的协议?

时间:2014-06-12 12:28:36

标签: io swift outputstream

我在Swift书中找不到关于io的任何内容。是否有类似于Java的OutputStream或Go的Writer接口的通用协议用于写入字节流?如果您正在编写一个返回流的类,您是否需要编写自己的协议或使用Objective C协议?

要明确我要求Swift原生接口不是因为我避免使用Objective C或Cocoa,而是为了描述Swift到Swift代码的预期行为。

1 个答案:

答案 0 :(得分:12)

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()