2014-10-26 11 views
14

Ich muss den Inhalt einer kurzen Textdatei in meinem Swift-Programm lesen. Ich tat dies:Eine kurze Textdatei zu einer Zeichenfolge in swift lesen

var err: NSError? 
let bundle = NSBundle.mainBundle() 
let path = bundle.pathForResource("cards", ofType: "ini") 
let content = String(contentsOfFile: path!, encoding: NSUTF8StringEncoding, error: nil) 

Mein Problem ist, dass ich die Fehlermeldung nicht verwenden kann. Wenn ich die letzte Zeile, um diese Änderung:

let content = String(contentsOfFile: path!, encoding: NSUTF8StringEncoding, error: err) 

Der Compiler beschwert "Extras Argument 'contentsOfFile' in Call". Das macht für mich keinen Sinn, vielleicht kann es jemand anders herausfinden?

+0

wo finden Sie die Lösung –

+0

Die Lösung ist unten. Pass 'err' als Referenz: '& err'. – udondan

Antwort

14

Auf den ersten Blick würde ich sagen, dass Sie die err Variable durch Verweis übergeben haben:

let content = String(contentsOfFile: path!, encoding: NSUTF8StringEncoding, error: &err) 
+0

Das scheint richtig zu sein. Und, wenn ich das sagen darf, obskur. –

+1

Nun, es ist nicht so obskur ... "Fehler" soll von innerhalb des Initialisierers gesetzt werden, so dass es in der Lage sein muss, eine Referenz und nicht eine Kopie zu übergeben. Btw wenn Sie sehen, dass ein Funktionsparameter mit dem Modifizierer "inout" vorangestellt ist, bedeutet dies, dass Sie als Referenz übergeben werden müssen. Verwenden Sie dazu den Operator '&' – Antonio

+1

a) Der Fehler ist eindeutig nicht so contentOfFile ist ein zusätzlicher Parameter. Der Fehler ist falsch b) Ich versuche Swift speziell, weil ich mich von BS genau so loswerden wollte. Es ist die Methodendeklaration und der Compiler, die sich mit Pass-by-Überlegungen befassen sollten, nicht mit dem Aufrufer. –

-1

konnte ich den Fehler beheben, indem sie auf diese Weise mit:

let content = String.stringWithContentsOfFile(path!, encoding: NSUTF8StringEncoding, error: nil) 

oder wenn gewünscht Fehler zu verwenden, berichten dann

var err: NSError? 
let content = String.stringWithContentsOfFile(path!, encoding: NSUTF8StringEncoding, error: &err) 
18

die neue Fehlerbehandlung introdu nach ced in iOS 9/Swift 2 ist dies eine Lösung für die für mich funktioniert, ist:

let fileLocation = NSBundle.mainBundle().pathForResource("filename", ofType: "txt")! 
let text : String 
do 
{ 
    text = try String(contentsOfFile: fileLocation) 
} 
catch 
{ 
    text = "" 
} 

Text den Inhalt der Datei oder leer sein im Falle eines Fehlers enthalten.

+0

Tatsächlich eine echte Verbesserung. Viele andere auch. –