在Swift Playground中无法读取文件。
如何使文件可读?
相同的代码在Xcode终端应用程序上运行良好,但在Swift Playground上运行失败。
下面的演示代码。
import Foundation
println("Hello, World!")
var fname:String = "/Users/holyfield/Desktop/com.apple.IconComposer.plist"
var fm:NSFileManager = NSFileManager.defaultManager()
if(fm.fileExistsAtPath(fname)){
println("File Exists")
if(fm.isReadableFileAtPath(fname)){
println("File is readable")
var fd:NSData? = NSData(contentsOfFile: fname)
println(fd?.length)
let pl = NSDictionary(contentsOfFile: fname)
println(pl?.count)
println(pl?.allKeys)
}else{
println("File is not readable")
}
}
else{
println("File does not exists")
}
示例图片:
答案 0 :(得分:15)
我首先要感谢Nate Cook的快速反应和坚定的答案。
仅仅是因为我从另一篇文章中分享了他的答案,这个标题具有误导性。
请参阅Nate的回答:https://stackoverflow.com/a/26723557/2360439
游乐场是沙盒,因此您无法从用户文件夹中的任何位置抓取文件。以下是如何将该文件添加到您的文件中 操场让它可以访问:
- 在Finder中找到您的“.playground”文件右键单击并选择“显示包内容”
- 您应该看到“timeline.xctimeline”,“contents.xcplayground”和“section-1.swift”
- 如果尚未存在,请创建一个名为“资源”的新文件夹。
- 将文件复制到资源文件夹
似乎无法在Playground沙箱之外使用Swift Playground访问文件。如果您知道如何访问沙箱之外的文件,欢迎您分享您的解决方案!!
答案 1 :(得分:7)
有几种方法可以将文件加载到Swift Playground中。我将重点介绍 Image Literal ,文件菜单和上下文菜单技术。
这是最简单和最酷的。您只需将文件从计算机上的任何位置拖到代码中,然后通过let
或var
语句进行分配。 GIF here。
选择File -> Add Files to "MyProjectName"
您可以使用右键单击菜单在Xcode(7.3.1)Project Navigator中显示当前的游乐场。在显示当前的游乐场后,您将看到名为“资源”的目录。只需将您想要访问的文件拖到该文件夹中,即可看到魔法发生(假设您已经编写了文件访问代码)。
以下是显示图像的示例:
let url: NSURL! = NSBundle.mainBundle().URLForResource("IMG_4099", withExtension: "JPG")
let imagePath = url.path
let image = UIImage(contentsOfFile: imagePath!)
let imageView = UIImageView.init(image: image)
我已经制作了animated GIF来证明这一点。这是一个屏幕抓取:
如果您想添加辅助代码以及资源,use the Sources folder。
当您在沙箱外部加载图像文件时,Xcode的Playground界面的控制台区域将向您显示UIImage
实例为nil
。如果您输入了一个您知道的路径,但图片未显示,请确保UIImage
实例未打印为nil
。
答案 2 :(得分:0)
您还可以创建和使用 Shared Playground Data 文件夹。 就是这样:
/用户/用户名/文档/共享的游乐场数据/file.txt
任何游乐场都可以读取其中的任何文件!