Lire un fichier texte ligne par ligne Swift?

Juste commencé à apprendre Swift, j'ai obtenu mon code pour lire à partir du fichier texte, et l'Application affiche le contenu du fichier Texte Entier. Comment puis-je afficher ligne par ligne et faire appel à cette ligne plusieurs fois?

fichier Texte.txt contient les éléments suivants.

  1. banane
  2. Apple
  3. poire
  4. fraise
  5. myrtille
  6. blackcurrent

ce qui suit actuellement..

  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
    }

aussi s'il y a une autre façon de le faire, faites-le moi savoir. Très apprécié

27
demandé sur ScarletEnvy 2015-08-03 05:39:40

3 réponses

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 variable myStrings doit être chaque ligne des données.

le code utilisé est: la Lecture du fichier ligne par ligne dans iOS SDK écrit en Obj-C et à l'aide de NSString

Vérifiez l'historique d'édition pour les versions précédentes de Swift.

61
répondu Caleb 2017-05-23 10:31:25

mise à jour pour 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)
    }

vaut également la peine de mentionner que ce code lit un fichier qui est dans le dossier du projet (puisque pathForResource est utilisé), et non pas dans le dossier des documents de l'appareil

5
répondu glace 2016-03-15 06:24:05

vous voulez probablement lire le dossier entier en une seule fois. Je parie que c'est très petit.

mais ensuite vous voulez diviser la chaîne résultante en un tableau, puis distribuer le contenu du tableau parmi divers éléments UI, tels que les cellules de table.

un exemple simple:

    var x: String = "abc\ndef"
    var y = x.componentsSeparatedByString("\n")
    // y is now a [String]: ["abc", "def"]
3
répondu BaseZen 2015-08-03 03:34:31