Swift 2.0代码适用于Xcode,但不适用于Playground

我正在学习 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

在操场上,我明白了:

在这做错了什么?我不正确地使用操场吗?

如果你去菜单

“View” -> “Debug Area” -> “Show Debug Area”

您将看到完整错误:“您无权从Playground *访问文件系统.”

解决方法是使用Project Navigator将文件包含在Playground中.

转到菜单

“View” -> “Navigators” -> “Show Project Navigator”

然后将文件拖放到“Resources”文件夹中.

然后使用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

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...