2014-06-12 13 views
7

Non riesco a trovare nulla nel libro Swift su io. Esiste un protocollo generico simile a OutputStream di Java o all'interfaccia Go's Writer per scrivere un flusso di byte? Se stai scrivendo una classe che restituisce uno stream, hai bisogno di scrivere il tuo protocollo o utilizzare un protocollo Objective C?swift ha un protocollo per scrivere un flusso di byte?

Per essere chiari sto chiedendo un'interfaccia nativa Swift per questo non perché evito di usare Objective C o Cocoa, ma per una descrizione del comportamento previsto per il codice da Swift a Swift in avanti.

+1

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Streams/ Articoli/CocoaStreamsOverview.html –

+0

Sembra strano che tu non abbia qualcosa di base come parte della libreria standard. L'NSStream in realtà non è come lo faresti se lo scrivessi in fretta. – sanz

+0

Concordo sul fatto che in questo momento Swift manchi in questo settore, ma è stato progettato per funzionare con i framework Cocoa. c'è qualcosa di specifico che stai cercando di fare? –

risposta

12

Questo è qualcosa che i doc Swift sono silenziosi e volevo sapere di più su così ho esaminato.

C'è un protocollo, si chiama Streamable:

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

OutputStream:

protocol OutputStream { 
    func write(string: String) 
} 

write permette un oggetto da scrivere.

String conforme ad entrambi, la rende facile da scrivere da e verso:

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

scrittura di un file:

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 

C'è anche writeToUrl.

Presumo quelle funzioni sono tutti costruiti in cima cacao corsi d'acqua, che hanno funzionalità simili:

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

Bella scoperta. Sembra che lo stiano ancora lavorando, il che è rassicurante. – sanz

Problemi correlati