我试图使用Swift操场阅读文本文件,如下所示
let dirs : String[]? = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true) as? String[]
if (dirs != nil) {
let directories:String[] = dirs!;
let dir = directories[0]; //documents directory
let path = dir.stringByAppendingPathComponent(file);
//read
let content = String.stringWithContentsOfFile(path, encoding: NSUTF8StringEncoding, error: nil)
}
Run Code Online (Sandbox Code Playgroud)
然而,这失败了没有错误.似乎第一行阻止操场输出下面的任何东西
kns*_*shn 63
您还可以将文件放入游乐场的资源中.为此:显示Project Navigator CMD + 1.将文件拖放到资源文件夹中.然后阅读文件:
在XCode 6.4和Swift 1.2上:
var error: NSError?
let fileURL = NSBundle.mainBundle().URLForResource("Input", withExtension: "txt")
let content = String(contentsOfURL: fileURL!, encoding: NSUTF8StringEncoding, error: &error)
Run Code Online (Sandbox Code Playgroud)
在XCode 7和Swift 2上:
let fileURL = NSBundle.mainBundle().URLForResource("Input", withExtension: "txt")
let content = try String(contentsOfURL: fileURL!, encoding: NSUTF8StringEncoding)
Run Code Online (Sandbox Code Playgroud)
在XCode 8和Swift 3上:
let fileURL = Bundle.main.url(forResource: "Input", withExtension: "txt")
let content = try String(contentsOf: fileURL!, encoding: String.Encoding.utf8)
Run Code Online (Sandbox Code Playgroud)
如果文件包含二进制数据,则可以使用NSData(contentsOfURL: fileURL!)或Data(contentsOf: fileURL!)(对于Swift 3).
mde*_*itt 36
虽然提供了快速解决方案的答案,但有一个更好的解决方案.
每次打开游乐场时,都会为其分配一个新容器.这意味着使用普通的目录结构,您每次都必须将所需的文件复制到新容器中.
相反,在容器内部有一个指向共享游乐场数据目录(/用户//文档/共享游乐场数据)的符号链接,该目录在重新打开游乐场时仍然存在,并且可以从多个游乐场访问.
您可以使用XCPlayground访问此共享文件夹.
import XCPlayground
let path = XCPlaygroundSharedDataDirectoryURL.appendingPathComponent("foo.txt")
Run Code Online (Sandbox Code Playgroud)
官方文档可以在这里找到:XCPlayground模块参考
关于如何组织每个操场的这个目录的酷帖:Swift,Playgrounds和XCPlayground
Ima*_*tit 20
ResourcesPlayground文件夹中的文件使用Swift 3,Bundle有一个叫做的方法url(forResource:withExtension:).url(forResource:withExtension:)有以下声明:
func url(forResource name: String?, withExtension ext: String?) -> URL?
Run Code Online (Sandbox Code Playgroud)
返回由指定名称和文件扩展名标识的资源的文件URL.
您可以使用url(forResource:withExtension:)它来读取位于ResourcesiOS或Mac Playground文件夹中的json文件的内容:
import Foundation
do {
guard let fileUrl = Bundle.main.url(forResource: "Data", withExtension: "json") else { fatalError() }
let data = try Data(contentsOf: fileUrl)
let json = try JSONSerialization.jsonObject(with: data, options: [])
print(json)
} catch {
print(error)
}
Run Code Online (Sandbox Code Playgroud)
您可以使用url(forResource:withExtension:)它来读取位于ResourcesiOS或Mac Playground文件夹中的文本文件的内容:
import Foundation
do {
guard let fileUrl = Bundle.main.url(forResource: "Text", withExtension: "txt") else { fatalError() }
let text = try String(contentsOf: fileUrl, encoding: String.Encoding.utf8)
print(text)
} catch {
print(error)
}
Run Code Online (Sandbox Code Playgroud)
作为替代方案let image = UIImage(named: "image"),您可以使用url(forResource:withExtension:)以访问位于ResourcesiOS Playground文件夹中的图像:
import UIKit
do {
guard let fileUrl = Bundle.main.url(forResource: "Image", withExtension: "png") else { fatalError() }
let data = try Data(contentsOf: fileUrl)
let image = UIImage(data: data)
} catch {
print(error)
}
Run Code Online (Sandbox Code Playgroud)
~/Documents/Shared Playground Data计算机文件夹中的文件使用Swift 3,PlaygroundSupport模块提供了一个名为的全局常量playgroundSharedDataDirectory.playgroundSharedDataDirectory有以下声明:
let playgroundSharedDataDirectory: URL
Run Code Online (Sandbox Code Playgroud)
包含所有操场之间共享数据的目录的路径.
您可以使用playgroundSharedDataDirectory以~/Documents/Shared Playground Data从iOS或Mac Playground 读取位于计算机文件夹中的json文件的内容:
import Foundation
import PlaygroundSupport
do {
let fileUrl = PlaygroundSupport.playgroundSharedDataDirectory.appendingPathComponent("Data.json")
let data = try Data(contentsOf: fileUrl)
let json = try JSONSerialization.jsonObject(with: data, options: [])
print(json)
} catch {
print(error)
}
Run Code Online (Sandbox Code Playgroud)
您可以使用playgroundSharedDataDirectory以~/Documents/Shared Playground Data从iOS或Mac Playground 读取位于计算机文件夹中的文本文件的内容:
import Foundation
import PlaygroundSupport
do {
let fileUrl = PlaygroundSupport.playgroundSharedDataDirectory.appendingPathComponent("Text.txt")
let text = try String(contentsOf: fileUrl, encoding: String.Encoding.utf8)
print(text)
} catch {
print(error)
}
Run Code Online (Sandbox Code Playgroud)
您可以使用playgroundSharedDataDirectory以~/Documents/Shared Playground Data从iOS Playground 访问位于计算机文件夹中的图像:
import UIKit
import PlaygroundSupport
do {
let fileUrl = PlaygroundSupport.playgroundSharedDataDirectory.appendingPathComponent("Image.png")
let data = try Data(contentsOf: fileUrl)
let image = UIImage(data: data)
} catch {
print(error)
}
Run Code Online (Sandbox Code Playgroud)
Vin*_*van 11
Swift 3(Xcode 8)
以下代码适用于iOS和macOS游乐场.文本文件(本例中为"MyText.txt")必须位于Resourcesplayground 的目录中. (注意:您可能需要打开导航窗口才能看到游乐场的目录结构.)
import Foundation
if let fileURL = Bundle.main.url(forResource:"MyText", withExtension: "txt")
{
do {
let contents = try String(contentsOf: fileURL, encoding: String.Encoding.utf8)
print(contents)
} catch {
print("Error: \(error.localizedDescription)")
}
} else {
print("No such file URL.")
}
Run Code Online (Sandbox Code Playgroud)
这适合我.我唯一改变的是明确文件名(在你的例子中暗示) - 也许你在"文件"变量的屏幕外定义中有一个拼写错误?
let dirs = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true) as? [String]
let file = "trial.txt" // My change to your code - yours is presumably set off-screen
if let directories = dirs {
let dir = directories[0]; //documents directory
let path = dir.stringByAppendingPathComponent(file);
//read
let content = NSString(contentsOfFile: path, usedEncoding: nil, error: nil)
// works...
}
Run Code Online (Sandbox Code Playgroud)
更新Swift 4.2
正如@raistlin指出的那样,现在就是这样
let dirs = NSSearchPathForDirectoriesInDomains(
FileManager.SearchPathDirectory.documentDirectory,
FileManager.SearchPathDomainMask.userDomainMask,
true)
Run Code Online (Sandbox Code Playgroud)
或者,更简洁地说:
let dirs = NSSearchPathForDirectoriesInDomains(.documentDirectory,
.userDomainMask, true)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28033 次 |
| 最近记录: |