Hallo liebe Leut'
ich habe vor ein paar Tagen angefangen, mich mit Swift zu beschäftigen.
Ich bin auch erst seit drei Wochen auf OS X unterwegs. Viele Wege, Eigenarten und Verhaltensweisen vom System sind mir demnach auch noch fremd. Auch wenn mir Unixoide nicht fremd sind. Selbst GNU/Hurd mit seinem Mach-Kernel (welcher ja auch bei Darwin zum einsatz kommt) hatte ich vor ca. 10 oder 12 Jahren schon auf dem PC laufen.
Installiert habe ich 10.11.1 und ich nutze XCode 7.1, demnach also Swift 2.
Nun versuche ich mich gerade etwas in die Sprache einzufuchsen und backe erstmal kleine Brötchen.
Als ich eine Möglichkeit suchte, eine simple Text-Datei einzulesen, graute es mir ein wenig. Entweder hab ich einen völlig falschen Such-Term genutzt (
Ich bin da andere Wege gewohnt
oder
Aber der Weg in Swift hat's echt in sich
Folgendes habe ich auf StackOverflow gefunden:
Alles anzeigen
Sicher ... in Perl oder VB.net wird im Hintergrund genau so viel passieren, aber dies blieb mir bisher verborgen und ich musste mich auch nicht darum kümmern, weil es funktionierte.
Wenn ich mittels dieser Klasse versuche, eine Datei zu lesen, bekomme ich nichts zurück ...
Im Einfachsten (und Wahrscheinlichsten) Fall bin ich einfach zu blöd für und ich habe das einfach nicht verstanden.
Da ich die Methode aber 1:1 vom Ersteller der Antwort auf SO übernommen habe, wundert es mich schon, dass ich da keine Ausgabe bekomme.
Die zu lesende Datei existiert und ist mit drei Zeilen gefüllt:
Danke schonmal
ich habe vor ein paar Tagen angefangen, mich mit Swift zu beschäftigen.
Ich bin auch erst seit drei Wochen auf OS X unterwegs. Viele Wege, Eigenarten und Verhaltensweisen vom System sind mir demnach auch noch fremd. Auch wenn mir Unixoide nicht fremd sind. Selbst GNU/Hurd mit seinem Mach-Kernel (welcher ja auch bei Darwin zum einsatz kommt) hatte ich vor ca. 10 oder 12 Jahren schon auf dem PC laufen.
Installiert habe ich 10.11.1 und ich nutze XCode 7.1, demnach also Swift 2.
Nun versuche ich mich gerade etwas in die Sprache einzufuchsen und backe erstmal kleine Brötchen.
Als ich eine Möglichkeit suchte, eine simple Text-Datei einzulesen, graute es mir ein wenig. Entweder hab ich einen völlig falschen Such-Term genutzt (
read file swift
), oder es ist wirklich so kompliziert, eine Datei in den Speicher zu lesen.Ich bin da andere Wege gewohnt
oder
Aber der Weg in Swift hat's echt in sich

Folgendes habe ich auf StackOverflow gefunden:
Quellcode
- class StreamReader {
- let encoding : UInt
- let chunkSize : Int
- var fileHandle : NSFileHandle!
- let buffer : NSMutableData!
- let delimData : NSData!
- var atEof : Bool = false
- init?(path: String, delimiter: String = "\n", encoding : UInt = NSUTF8StringEncoding, chunkSize : Int = 4096) {
- self.chunkSize = chunkSize
- self.encoding = encoding
- if let fileHandle = NSFileHandle(forReadingAtPath: path),
- delimData = delimiter.dataUsingEncoding(encoding),
- buffer = NSMutableData(capacity: chunkSize)
- {
- self.fileHandle = fileHandle
- self.delimData = delimData
- self.buffer = buffer
- } else {
- self.fileHandle = nil
- self.delimData = nil
- self.buffer = nil
- return nil
- }
- }
- deinit {
- self.close()
- }
- /// Return next line, or nil on EOF.
- func nextLine() -> String? {
- precondition(fileHandle != nil, "Attempt to read from closed file")
- if atEof {
- return nil
- }
- // Read data chunks from file until a line delimiter is found:
- var range = buffer.rangeOfData(delimData, options: [], range: NSMakeRange(0, buffer.length))
- while range.location == NSNotFound {
- let tmpData = fileHandle.readDataOfLength(chunkSize)
- if tmpData.length == 0 {
- // EOF or read error.
- atEof = true
- if buffer.length > 0 {
- // Buffer contains last line in file (not terminated by delimiter).
- let line = NSString(data: buffer, encoding: encoding)
- buffer.length = 0
- return line as String?
- }
- // No more lines.
- return nil
- }
- buffer.appendData(tmpData)
- range = buffer.rangeOfData(delimData, options: [], range: NSMakeRange(0, buffer.length))
- }
- // Convert complete line (excluding the delimiter) to a string:
- let line = NSString(data: buffer.subdataWithRange(NSMakeRange(0, range.location)),
- encoding: encoding)
- // Remove line (and the delimiter) from the buffer:
- buffer.replaceBytesInRange(NSMakeRange(0, range.location + range.length), withBytes: nil, length: 0)
- return line as String?
- }
- /// Start reading from the beginning of file.
- func rewind() -> Void {
- fileHandle.seekToFileOffset(0)
- buffer.length = 0
- atEof = false
- }
- /// Close the underlying file. No reading must be done after calling this method.
- func close() -> Void {
- fileHandle?.closeFile()
- fileHandle = nil
- }
- }
Wenn ich mittels dieser Klasse versuche, eine Datei zu lesen, bekomme ich nichts zurück ...
Im Einfachsten (und Wahrscheinlichsten) Fall bin ich einfach zu blöd für und ich habe das einfach nicht verstanden.
Da ich die Methode aber 1:1 vom Ersteller der Antwort auf SO übernommen habe, wundert es mich schon, dass ich da keine Ausgabe bekomme.
Die zu lesende Datei existiert und ist mit drei Zeilen gefüllt:
Danke schonmal
