web-dev-qa-db-ja.com

Swift 2およびXcode7を使用して遊び場のテキストリソースファイルを読み取る方法

Xcode 7 PlaygroundsはnestedResourcesディレクトリからのファイルのロードをサポートするようになりました。

ResourcesGameScene.sksがある場合はSKScene(fileNamed: "GameScene")を、ResourcesGameScene.pngがある場合はNSImage(named:"GameScene.png")を取得できます。

しかし、Playground Resourcesディレクトリからも通常のテキストファイルを読み取るにはどうすればよいですか?

14
Jeremy Chone

Bundle.mainを使用できます

だから、あなたがあなたの遊び場にtest.jsonを持っているなら

enter image description here

次のようにアクセスしてコンテンツを印刷できます。

// 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)")
}

印刷します

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 回答、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)")
}
11
leanne

文字列はURLで直接使用できます。 Swift 3の例:

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

別の短い方法(Swift 3):

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

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

Swift 5

Playgroundのバンドルによって、Resourcesフォルダー内のファイルにアクセスすることができます。

import UIKit

JSONデータを取得する2つの方法があります。

道:

    guard let path = Bundle.main.path(forResource:"test", ofType: "json"),
    let data = FileManager.default.contents(atPath: path) else {
        fatalError("Can not get json data")
    }

URL:

    guard let url = Bundle.main.url(forResource:"test", withExtension: "json") else {
            fatalError("Can not get json file")
    }
    if let data = try? Data(contentsOf: url) {
        // do something with data
    }
1
skymook