2014-10-26 2 views
14

Ho bisogno di leggere il contenuto di un breve file di testo nel mio programma Swift. Ho fatto questo:Leggere un breve file di testo su una stringa in swift

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

Il mio problema è che non posso utilizzare la segnalazione degli errori. Se cambio che ultima riga a questo:

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

Il compilatore si lamenta "argomento Extra 'contentsOfFile' nella chiamata". Non ha senso per me, forse qualcun altro può capirlo?

+0

dove è possibile trovare la soluzione –

+0

La soluzione è di seguito. Passa 'err' per riferimento:' & err'. – udondan

risposta

14

A prima vista direi che si deve passare la variabile err per riferimento:

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

Sembra corretto. E, se posso dirlo, oscuro. –

+1

Beh, non è così oscuro ... si suppone che 'error' venga impostato dall'inizializzatore, quindi per poter essere modificato è necessario passare un riferimento e non una copia. Btw quando vedi un parametro funzione preceduto dal modificatore 'inout', che significa che devi passare per riferimento, usando l'operatore' & '(che sta per" reference to ") – Antonio

+1

a) l'errore non è chiaramente quello contentOfFile è un parametro extra. L'errore è sbagliato b) Sto provando Swift in particolare perché volevo liberarmi di BS esattamente così. È la dichiarazione del metodo e il compilatore che dovrebbe gestire le considerazioni sul pass-by, non il chiamante. –

-1

ero in grado di risolvere l'errore utilizzando in questo modo:

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

o se ha voluto utilizzare la segnalazione degli errori, allora

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

Dopo l'Introd movimentazione nuovo errore ced in iOS 9/Swift 2, una soluzione per questo che funziona per me è:

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

testo conterrà il contenuto del file o essere vuoto, nel caso di un errore.

+0

In effetti, un vero miglioramento. Anche molti altri. –