web-dev-qa-db-fra.com

Comment lire des fichiers de ressources texte dans une aire de jeux avec Swift 2 et XCode 7

XCode 7 Playground prend en charge les ressources de terrain de jeu. Je peux obtenir SKScene (nom de fichier: "GameScene") lorsque j'ai un GameScene.sks dans mes ressources ou NSImage (nommé: "GameScene.png") si j'ai un GameScene.png dans vos ressources. 

Mais comment lire un fichier texte à partir des ressources de Playground? 

12
Jeremy Chone

Nous pouvons utiliser le Bundle.main

Donc, si vous avez un test.json dans votre terrain de jeu comme

enter image description here

Vous pouvez y accéder et imprimer son contenu comme ça: 

// get the file path for the file "test.json" in the playground bundle
let filePath = Bundle.main.path(forResource:"test", ofType: "json")

// get the contentData
let contentData = FileManager.default.contents(atPath: filePath!)

// get the string
let content = String(data:contentData!, encoding:String.Encoding.utf8)

// print
print("filepath: \(filePath!)")

if let c = content {
    print("content: \n\(c)")
}

Va imprimer

filepath: /var/folders/dm/zg6yp6yj7f58khhtmt8ttfq00000gn/T/com.Apple.dt.Xcode.pg/applications/Json-7800-6.app/Contents/Resources/test.json
content: 
{
    "name":"jc",
    "company": {
        "name": "Netscape",
        "city": "Mountain View"
    }
}
30
Jeremy Chone

Jeremy Chone's answer, mis à jour pour Swift 3, Xcode 8:

// get the file path for the file "test.json" in the playground bundle
let filePath = Bundle.main.path(forResource: "test", ofType: "json")

// get the contentData
let contentData = FileManager.default.contents(atPath: filePath!)

// get the string
let content = String(data: contentData!, encoding: .utf8)


// print
print("filepath: \(filePath!)")

if let c = content {
    print("content: \n\(c)")
}
10
leanne

Vous pouvez utiliser String directement avec une URL. Exemple dans Swift 3:

let url = Bundle.main.url(forResource: "test", withExtension: "json")!
let text = String(contentsOf: url)
6
Damiaan Dufaux

Ajout de l'essai pour Swift3.1:

let url = Bundle.main.url(forResource: "test", withExtension: "json")!
// let text = String(contentsOf: url)
do {
    let text = try String(contentsOf: url)
    print("text: \n\(text)")
}
catch _ {
    // Error handling
}

// --------------------------------------------------------------------
let filePath2 = Bundle.main.path(forResource: "test", ofType: "json")
do {
    let content2: String = try String(contentsOfFile: filePath2!, encoding: .utf8)
    print("content2: \n\(content2)")

}
catch _ {
    // Error handling
}
1
user8416808

Un autre chemin court (Swift 3):

let filePath = Bundle.main.path(forResource: "test", ofType: "json")
let content: String = String(contentsOfFile: filePath!, encoding: .utf8)
0
Yoav Aharoni