2015-08-03 22 views
22

Appena iniziato a imparare Swift, ho ottenuto il mio codice da leggere dal file di testo e l'app visualizza il contenuto dell'intero file di testo. Come posso visualizzare riga per riga e chiamare più volte quella riga?Leggere un file di testo riga per riga in Swift?

TextFile.txt contiene quanto segue.

  1. Banana
  2. di Apple
  3. pera
  4. fragola
  5. mirtillo
  6. blackcurrent

seguente è quello che hanno attualmente ..

if let path = NSBundle.mainBundle().pathForResource("TextFile", ofType: "txt"){ 
     var data = String(contentsOfFile:path, encoding: NSUTF8StringEncoding, error: nil) 
      if let content = (data){ 
       TextView.text = content 
    } 

anche se c'è un altro modo, di farlo per favore fatemelo sapere. Molto apprezzato

+0

OK, sembra che ci sia solo una riga in questo file. Intendi parole separate invece di linee? – Shripada

+0

Spiacente, si supponeva che fosse un elenco usando a/n per separarlo – ScarletEnvy

risposta

52

Swift 3,0

if let path = Bundle.main.path(forResource: "TextFile", ofType: "txt") { 
    do { 
     let data = try String(contentsOfFile: path, encoding: .utf8) 
     let myStrings = data.components(separatedBy: .newlines) 
     TextView.text = myStrings.joined(separator: ", ") 
    } catch { 
     print(error) 
    } 
} 

La variabile myStrings dovrebbe essere ogni riga dei dati.

Il codice utilizzato da: Reading file line by line in iOS SDK scritto in Obj-C e utilizzando NSString

storia Verificare di modifica per le versioni precedenti di Swift.

+0

SÌ! grazie per quello quello ha funzionato perfettamente! Grazie: D – ScarletEnvy

+0

Nessun problema. Felice di poterti aiutare! – Caleb

+1

Ehi, anche se dovessi visualizzare due righe alla volta, sarebbe '= myStrings [5,1]' ...? – ScarletEnvy

2

Probabilmente vorrai leggere l'intero file in una volta sola. Scommetto che è molto piccolo.

Ma poi si desidera dividere la stringa risultante in una matrice e quindi distribuire il contenuto della matrice tra vari elementi dell'interfaccia utente, come le celle della tabella.

Un semplice esempio:

var x: String = "abc\ndef" 
    var y = x.componentsSeparatedByString("\n") 
    // y is now a [String]: ["abc", "def"] 
+0

Sì! : Questo è esattamente quello che sto chiedendo. così x dovrebbe essere assegnato a = dati? – ScarletEnvy

+0

Cosa fa esattamente questo x e y? – ScarletEnvy

+0

Oh, in realtà ho capito :) grazie – ScarletEnvy

5

Aggiornamento per Swift 2.0/Xcode 7,2

do { 
     if let path = NSBundle.mainBundle().pathForResource("TextFile", ofType: "txt"){ 
      let data = try String(contentsOfFile:path, encoding: NSUTF8StringEncoding) 

      let myStrings = data.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet()) 
      print(myStrings) 
     } 
    } catch let err as NSError { 
     //do sth with Error 
     print(err) 
    } 

Inoltre vale la pena di menzionare è che questo codice legge un file che si trova nella cartella del progetto (dal pathForResource è usato), e non in es la cartella documenti del dispositivo

Problemi correlati