我正在学习Swift,并且对弄清楚如何无法加载文件感到沮丧。事实证明,该代码在Xcode中有效,但在游乐场中不起作用。这是什么原因呢?

这是代码:

func testFileLoad(){
    let myFilePath: String = "/Users/clay/Desktop/test.txt"
    let t: Bool = NSFileManager.defaultManager().fileExistsAtPath(myFilePath)
    print(t)

    let s: String = try! String(contentsOfFile: myFilePath, encoding: NSUTF8StringEncoding)
    print(s)

    do {
        let p: String = try String(contentsOfFile: myFilePath, encoding: NSUTF8StringEncoding)
        print(p)
    } catch {
        print("nope")
    }
}

它在Xcode的测试模块中运行,可以正常工作,并将我希望的内容输出到控制台。
Test Suite 'Selected tests' started at 2015-08-05 14:24:15.977
Test Suite 'swiftgraphTests' started at 2015-08-05 14:24:15.978
Test Case '-[swiftgraphTests.swiftgraphTests testFileLoad]' started.
true
this is a test
this is a test
Test Case '-[swiftgraphTests.swiftgraphTests testFileLoad]' passed (0.001 seconds).
Test Suite 'swiftgraphTests' passed at 2015-08-05 14:24:15.979.
    Executed 1 test, with 0 failures (0 unexpected) in 0.001 (0.001) seconds
Test Suite 'Selected tests' passed at 2015-08-05 14:24:15.979.
    Executed 1 test, with 0 failures (0 unexpected) in 0.001 (0.002) seconds

在操场上,我得到了:

xcode - Swift 2.0代码可在Xcode中使用,但不能在Playground中使用-LMLPHP

我在做什么错呢?我在操场上使用不当吗?

最佳答案

如果您进入菜单



您将看到完整的错误:“您没有从Playground *访问文件系统的权限。”

解决方法是使用其项目导航器将文件包括在Playground中。

进入菜单



然后将文件拖放到“资源”文件夹中。

然后使用NSBundle获取路径。

func testFileLoad() {

    // get the file path for the file from the Playground's Resources folder
    guard let path = NSBundle.mainBundle().pathForResource("test", ofType: "txt") else {
            print("Oops, the file is not in the Playground")
            return
    }

    // keeping the examples from your question
    let s: String = try! String(contentsOfFile: path, encoding: NSUTF8StringEncoding)
    print(s)

    do {
        let p: String = try String(contentsOfFile: path, encoding: NSUTF8StringEncoding)
        print(p)
    } catch {
        print("nope")
    }

}

testFileLoad()

*实际上,您只能访问包含您的Playground共享数据的/var/文件夹,而Playground只是提供了一个快捷方式。 Playground导航器中的此文件夹实际上代表/var/文件夹,并且对于每个Playground都是唯一的。您可以通过NSBundle查看其地址:
NSBundle.mainBundle().resourcePath

关于xcode - Swift 2.0代码可在Xcode中使用,但不能在Playground中使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31840335/

10-10 16:44