Xcode 7 PlaygroundsはnestedResources
ディレクトリからのファイルのロードをサポートするようになりました。
Resources
にGameScene.sks
がある場合はSKScene(fileNamed: "GameScene")
を、Resources
にGameScene.png
がある場合はNSImage(named:"GameScene.png")
を取得できます。
しかし、Playground Resources
ディレクトリからも通常のテキストファイルを読み取るにはどうすればよいですか?
Bundle.main
を使用できます
だから、あなたがあなたの遊び場にtest.jsonを持っているなら
次のようにアクセスしてコンテンツを印刷できます。
// 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"
}
}
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)")
}
文字列はURLで直接使用できます。 Swift 3の例:
let url = Bundle.main.url(forResource: "test", withExtension: "json")!
let text = String(contentsOf: url)
別の短い方法(Swift 3):
let filePath = Bundle.main.path(forResource: "test", ofType: "json")
let content: String = String(contentsOfFile: filePath!, encoding: .utf8)
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
}
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
}