2014-10-26 14 views
14

Muszę przeczytać zawartość krótkiego pliku tekstowego w moim programie Swift. Zrobiłem to:Czytanie krótkiego pliku tekstowego na ciąg w szybkim tempie

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

Mój problem polega na tym, że nie mogę używać zgłaszania błędów. Jeśli zmienię ostatnią linię na tę:

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

Kompilator narzeka "Dodatkowy argument" contentsOfFile "w wywołaniu". To ma dla mnie zero sensu, może ktoś inny może to zrozumieć?

+0

gdzie można znaleźć rozwiązanie –

+0

Rozwiązanie znajduje się poniżej. Przekaż 'err' przez referencję:' & err'. – udondan

Odpowiedz

14

Na pierwszy rzut oka powiedziałbym, że trzeba przekazać zmienną err przez odniesienie:

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

To wydaje się być poprawne. I, jeśli mogę tak powiedzieć, niejasne. –

+1

Cóż, nie jest to tak mało znane ... "Błąd" powinien być ustawiony z poziomu inicjalizatora, więc aby mógł on modyfikować, musisz podać referencję, a nie kopię. Btw, gdy zobaczysz parametr funkcji poprzedzony modyfikatorem 'inout', który oznacza, że ​​musisz przejść przez referencję, używając operatora' & '(co oznacza" odwołanie do ") – Antonio

+1

a) błąd wyraźnie nie jest taki contentOfFile jest dodatkowym parametrem. Błąd jest nieprawidłowy b) Próbuję Swift specjalnie dlatego, że chciałem pozbyć się BS właśnie w ten sposób. Jest to deklaracja i kompilator metod, które powinny obsługiwać kwestie dotyczące przekazywania, a nie wywołującego. –

-1

udało mi się rozwiązać problem poprzez wykorzystanie go w ten sposób:

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

lub jeśli chcesz użyć funkcji zgłaszania błędów, następnie

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

Po wprowadzeniu nowego opisu błędów ced na iOS 9/Swift 2, roztwór do tego, że pracuje dla mnie jest:

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

tekst będzie zawierać zawartość pliku lub być pusta w przypadku wystąpienia błędu.

+0

Rzeczywiście, prawdziwa poprawa. Mnóstwo innych też. –

Powiązane problemy