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

Io swift是否有写入字节流的协议?,io,swift,outputstream,Io,Swift,Outputstream,我在斯威夫特的书里找不到关于伊奥的任何东西。有没有类似于Java的OutputStream或Go的Writer接口的通用协议来编写字节流?如果您正在编写一个返回流的类,那么您需要编写自己的协议还是使用Objective C协议 明确地说,我要求提供Swift本机接口并不是因为我避免使用Objective C或Cocoa,而是为了描述Swift-To-Swift代码未来的预期行为。这是Swift文档不太关心的事情,我想知道更多,所以我研究了它 有一个协议,它被称为可流化: protocol Str

我在斯威夫特的书里找不到关于伊奥的任何东西。有没有类似于Java的OutputStream或Go的Writer接口的通用协议来编写字节流?如果您正在编写一个返回流的类,那么您需要编写自己的协议还是使用Objective C协议


明确地说,我要求提供Swift本机接口并不是因为我避免使用Objective C或Cocoa,而是为了描述Swift-To-Swift代码未来的预期行为。

这是Swift文档不太关心的事情,我想知道更多,所以我研究了它

有一个协议,它被称为
可流化

protocol Streamable {
    func writeTo<Target : OutputStream>(inout target: Target)
}
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

我假设这些功能都构建在可可流之上,可可流具有类似的功能:

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()
var os=NSOutputStream(toFileAtPath:“output.txt”,append:true)
os.ScheduleRunLoop(NSRunLoop.currentRunLoop(),格式:NSDefaultRunLoopMode)
var msg=“一条真正了不起的消息”
变量ptr:CConstPointer=msg.nulTerminatedUTF8
os.open()
写入(ptr,maxLength:msg.lengthOfBytesUsingEncoding(NSUTF8StringEncoding))
操作系统关闭()

似乎有些奇怪,因为标准库中没有这样基本的东西。如果你用swift写的话,NSStream真的不是你应该怎么做的。我同意swift目前在这方面还缺乏,但它是为与Cocoa框架一起工作而设计的。“你有什么特别想做的吗?”托尼非常好奇——你为什么不使用NSStream?我不认为斯威夫特在场并不意味着可可就要消失了。我要说的是,在Swift中使用流是一种非常合法的方式。@macandyp No我将使用NSStream,当然这是一种合法的方式。这似乎不是很地道。我原以为需要定期使用可可粉用于特定用途,但实际上没有快速使用的例子。如何在没有N错误的情况下返回错误,何时使用optionals等。即使几乎没有任何东西实现swift writer协议,如果我写了一些新的东西,我希望使用它而不是Obj C方式。它实际上是关于实现和协议的。我可以同时为读者和作者写作,我想知道用什么样的方式来写作。很好的发现。看起来他们仍然在工作,这让人放心。请注意,协议已重命名为Swift 5(我认为还有4)
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()