Lire le file dans Swift, iOS aire de jeux

Ayant cherché à travers les nombreuses (nombreuses!) Questions rapides de terrain de jeu pour élaborer ce code, je suis toujours en difficulté.

J'ai placé un file text dans le dossier Resources du contenu du package, et il apparaît comme un alias (lien) dans les files temporaires en cours d'exécution générés par le terrain de jeu ( /var/folders/ ... ).

 import UIKit let bundle = NSBundle.mainBundle() let myFilePath = bundle.pathForResource("dict1", ofType: "txt") println(myFilePath) // <-- this is correct, there is a shortcut to the Resource file at this location var error:NSError? var content = Ssortingng(contentsOfFile:myFilePath!, encoding:NSUTF8SsortingngEncoding, error: &error) println(content!) // <-- this is *NOT* the file contents [EDIT: see later note] // Demonstrate there's no error if let theError = error { print("\(theError.localizedDescription)") } else { print("No error") } 

Le problème étant que le content est affiché dans la sortie du terrain de jeu comme étant un Some "apple\ngame\nhow\nswift\ntoken" , plutôt que le contenu du file comme prévu.

C'est find le file, parce que si je change le nom de file, il y a des erreurs. Des conseils sur l'obtention du contenu du file?

Xcode 6.1

EDIT: Donc, le vrai problème était que je ne m'attendais pas à ce que la sortie du jeu (y compris println ) soit échappée. Cela, combiné à la fatigue et à d'autres stupidités, m'a amené à croire qu'il y avait un problème, quand il n'y en avait pas.

Fait intéressant, tout ne semble pas être échappé dans le terrain de jeu:

 println("foo\nbar") // Outputs "foo\nbar", escaped println("\\n") // Outputs "\n", unescaped 

Vous pouvez essayer de créer une class pour ouvrir et save vos files:

mise à jour: Xcode 7.2 • Swift 2.1.1

 class File { class func open(path: Ssortingng, encoding: NSSsortingngEncoding = NSUTF8SsortingngEncoding) -> Ssortingng? { if NSFileManager().fileExistsAtPath(path) { do { return try Ssortingng(contentsOfFile: path, encoding: encoding) } catch let error as NSError { print(error.code) return nil } } return nil } class func save(path: Ssortingng, _ content: Ssortingng, encoding: NSSsortingngEncoding = NSUTF8SsortingngEncoding) -> Bool { do { try content.writeToFile(path, atomically: true, encoding: encoding) return true } catch let error as NSError { print(error.code) return false } } } 

Utilisation: File.save

 let ssortingngToSave:Ssortingng = "Your text" let didSave = File.save("\(NSHomeDirectory())/Desktop/file.txt", ssortingngToSave) if didSave { println("file saved") } else { println("error saving file") } 

Utilisation: File.Open

 if let loadedData = File.open("\(NSHomeDirectory())/Desktop/file.txt") { println(loadedData) } else { println("error reading file") } 

Si vous préférez travailler avec des URL (comme je le fais et recommandé par Apple):

 class Url { class func open(url: NSURL) -> Ssortingng? { do { return try Ssortingng(contentsOfURL: url, encoding: NSUTF8SsortingngEncoding) } catch let error as NSError { print(error.code) return nil } } class func save(urL: NSURL, fileContent: Ssortingng) -> Bool { do { try fileContent.writeToURL(urL, atomically: true, encoding: NSUTF8SsortingngEncoding) return true } catch let error as NSError { print(error.code) return false } } } 

J'ai vu ce problème avec les files .txt créés à partir de files .rtf en utilisant TextEdit.

J'ai chargé un file text.txt dans le dossier des ressources de mon terrain de jeu en utilisant un code similaire à vous. Le contenu du file était "bonjour là" et a été fait en convertissant un file .rtf en .txt en changeant l'extension.

 let path = NSBundle.mainBundle().pathForResource("text", ofType: "txt")//or rtf for an rtf file var text = Ssortingng(contentsOfFile: path!, encoding: NSUTF8SsortingngEncoding, error: nil)! println(text) 

La sortie était:

{\ rtf1 \ ansi \ ansicpg1252 \ cocoartf1343 \ cocoasubrtf140 {\ fonttbl \ f0 \ fswiss \ fcharset0 Helvetica;} {\ colortbl; \ red255 \ vert255 \ blue255;} \ margl1440 \ margr1440 \ vieww10800 \ viewh8400 \ viewkind0 \ pard \ tx720 \ tx1440 \ tx2160 \ tx2880 \ tx3600 \ tx4320 \ tx5040 \ tx5760 \ tx6480 \ tx7200 \ tx7920 \ tx8640 \ pardirnatural

\ f0 \ fs24 \ cf0 bonjour}

Donc le "bonjour là" est embedded. C'est le problème avec toutes les informations de layout dans un file .rtf.

Je suis returnné à TextEdit et j'ai créé un vrai file .txt. Après avoir ouvert un file – Format | Make Plain Text

Maintenant, ce même code a donné la sortie de la console "bonjour là".

J'espère que cela t'aides.