Swift Playground - 文件不可读

D.A*_*A.H 15 xcode foundation swift xcode6 swift-playground

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")
}
Run Code Online (Sandbox Code Playgroud)

示例图片:

XCode终端应用程序 斯威夫特游乐场

D.A*_*A.H 15

我要首先感谢Nate Cook的快速反应和坚定的答案.

仅仅是因为我从另一篇文章中分享了他的答案,这个标题具有误导性.

请参阅Nate的答案:https://stackoverflow.com/a/26723557/2360439

操场是沙盒,因此您无法从用户文件夹中的任何位置抓取文件.以下是如何将该文件添加到您的游乐场以使其可访问:

  • 在Finder中找到".playground"文件右键单击并选择"显示包内容"
  • 你应该看到"timeline.xctimeline","contents.xcplayground"和"section-1.swift"
  • 如果它还不存在,请创建一个名为" Resources " 的新文件夹.
  • 将文件复制到Resources文件夹中

似乎无法在Playground沙箱之外使用Swift Playground访问文件.如果您知道如何访问沙箱之外的文件,欢迎您分享您的解决方案!

显示包装内容

资源文件夹


jam*_*ack 7

有几种方法可以将文件加载到Swift Playground中.我将重点介绍Image Literal,File MenuContext Menu技术.

Image Literal技术

这是最简单和最酷的.您只需将文件从计算机上的任何位置拖到代码中,然后通过letvar语句进行分配.GIF在这里. 在此输入图像描述

文件菜单技术

选择 File -> Add Files to "MyProjectName"

请参阅此处的GIF.

上下文菜单技术

您可以使用右键单击菜单在Xcode(7.3.1)项目导航器中显示当前的游乐场.在显示当前的游乐场后,您将看到名为"资源"的目录.只需将您想要访问的文件拖到该文件夹​​中,即可看到魔法发生(假设您已编写文件访问代码).

示例资源加载代码

以下是显示图像的示例:

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)
Run Code Online (Sandbox Code Playgroud)

我制作了一个动画GIF,演示了这一点.这是一个屏幕抓取: 在此输入图像描述

阅读外部代码

如果要添加除资源之外的辅助代码,请使用Sources文件夹.

关于控制台的说明

Xcode的Playground界面的控制台区域将向您显示UIImage实例是nil在沙箱外部加载图像文件时的实例.如果您输入了一个您知道的路径,但图像未显示,请确保该UIImage实例未打印为nil.