我在Swift的书里找不到任何关于io的东西。是否有类似于Java的OutputStream或Go的Writer接口的通用协议来编写字节流?如果你正在编写一个返回流的类,你需要编写自己的协议还是使用Objective C协议?
要明确的是,我要求Swift原生接口不是因为我避免使用Objective C或Cocoa,而是为了描述Swift到Swift代码的预期行为。
这是Swift文档中没有提到的,我想了解更多,所以我研究了一下。
有一个协议,叫做Streamable
:
protocol Streamable {
func writeTo<Target : OutputStream>(inout target: Target)
}
OutputStream
:
protocol OutputStream {
func write(string: String)
}
write
允许写入对象。
String
符合这两者,使得写入和from变得容易:
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()